PHP で json の POST request の body を参照するには

PHP で web アプリケーションを作るに当たって、POST リクエストの body の内容は $_POST に入ってくるというふうに、いろんなドキュメントには書いてある。

json でやり取りする web api なんかを PHP で作るにあたって、POST された json の内容を取得したい事は多い。
しかし、$_POST を参照しても、中身は空だった。

公式ドキュメントサイトを見てみると、

Content-Type に application/x-www-form-urlencoded あるいは multipart/form-data を用いた HTTP リクエストで、 HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列です。 http://php.net/manual/ja/reserved.variables.post.php

とのこと。つまり、Content-Type が application/json の POST リクエストの場合は、$_POST には入ってこないらしい。

json の POST request body を参照するには、 php://input というストリームを使ってリクエストの生の body を取得する事になる。
下記のような感じだと思う。

$params = json_decode(file_get_contents('php://input'), true);  // NOTE 第2引数に true を指定しているのは連想配列にするため
echo $params['title'];