- モリヤ
総記事本数:11
こんにちは
開発部のモリヤです。
WebAPIなどを使用した際に、JSON形式でPOST送信されたパラメータを受信する方法についてご紹介いたします。
PHP標準の「$_POST」で取得しようとすると中身が空の配列取得となり、正常にデータが取得できません。
「$HTTP_RAW_POST_DATA」で生のPOSTデータを取得します。
ただこちらはPHP 5.6.0 で 非推奨 となり、 PHP 7.0.0 で 削除となるため、使用すべきではありません。
より正確に言うと、「$HTTP_RAW_POST_DATA」が非推奨となる要因として、php.ini内にある生のPOSTデータへのアクセス可否を定義する「always_populate_raw_post_data」項目がPHP 7.0.0 で削除となるためとなります。
>> コア php.ini ディレクティブに関する説明
PHP 5.6.0 以降で推奨される取得方法「file_get_contents(‘php://input’)」での取得結果となります。
問題なくPOSTされたJSON形式データが取得できています。
通常のPOSTデータはKeyとValueの組み合わせによる連想配列の形式出来となりますが、JSON形式に変換することで文字列のみとなり、標準の「$_POST」では形式が合わず取得が出来なくなるためと思われます。
PHPもJSONも分からずで、参考にさせて頂きました。 とても、参考になりましたが、無知の悲しさ、結構はまりました。
たぶん、一か所、間違いが有ると思います。
// コンテキストオプションセット
$options = array(
“http” => array(
“method” => “POST”,
“header” => “Content-type: application/json; charset=UTF-8”,
“content” => $contents
)
);
ですが、最後の”content” => $contents は、
“content” => $data では? ブラウザで、動かすと、変数未定義エラーが出ないので…
Shin さん
ご指摘ありがとうございます!
おっしゃる通り「”content” => $data」ですね。。
記述修正しました。
コメントをどうぞ