【PHP】Content-Typeがapplication/jsonのPOSTから値を取得する
課題
PHPで $name = (string)filter_input(INPUT_POST, 'name')
でPOSTの値を取得できない。
原因
$_POST()
または (キャスト)filter_input(INPUT_POST, 'key')
では、そもそも application/json
を取得できない。
公式リファレンスでは下記のように書いてある。
Content-Type に
application/x-www-form-urlencoded
あるいはmultipart/form-data
を用いた HTTP リクエストで、 HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列です。 https://www.php.net/manual/ja/reserved.variables.post
解決方法
file_get_content('php://input')
でJSONファイルを取得して、 json_decode()
でオブジェクトに変換して取り出す。
$json = file_get_contents('php://input'); $object = json_decode($json);
PostmanでのPOST送信の方法
参考
Postman POSTが送信できない | OCテックノート
【PHP】JSONデータのPOST受け取りで application/x-www-form-urlencoded とapplication/json の両方に対応 - Qiita