file_get_contents を使って JSON を送信

2019/07/10

前回、PHPでPOST送信を行いました。

ただ、実際のWeb APIでは送信データはJSON形式でやり取りすることが多いです。

なので、今回はJSON形式でPOST送信してみます。

 

サンプルソースコード

データを送信する側(send.php)

<?php

// 送信データ
$data = array(
"key1" => "value1",
"key2" => "value2"
);

// JSON形式に変換
$data = json_encode($data);

// ストリームコンテキストのオプションを作成
$options = array(
// HTTPコンテキストオプションをセット
'http' => array(
'method'=> 'POST',
'header'=> 'Content-type: application/json; charset=UTF-8', //JSON形式で表示
'content' => $data
)
);

// ストリームコンテキストの作成
$context = stream_context_create($options);

// POST送信
$contents = file_get_contents('http://localhost/api/reception.php', false, $context);

// reception.php のレスポンスを表示
echo $contents;

 

データを受け取る側(reception.php)

<?php

// POST の生データの読み込む
$json_string = file_get_contents('php://input');

// JSON形式で表示
echo "JSON形式:".$json_string."
"; echo "PHP変数に変換:"; // JSON エンコードされた文字列を PHP の変数に変換 $contents = json_decode($json_string); // reception.php のレスポンスを表示 print_r($contents);

 

実行結果

 

解説

json_encode関数について

PHP形式のデータ形式をJSON形式に変換する場合は json_encode関数を使います。


// JSON形式に変換
$data = json_encode($data);

 
JSONテキストのMIMEタイプは application/json と定められています。

なので、ストリームコンテキストでヘッダー情報を以下のように設定します。


'header'=> 'Content-type: application/json; charset=UTF-8',

 

JSONデータの受信処理

JSONデータの受信処理です。file_get_contents関数で送信データを受信します。JSON の場合はここがポイントになります。


$json_string = file_get_contents('php://input');

 

json_decode()関数について

PHPでは、JSONデータをそのまま扱うことができません。実践では json_decode関数を利用して、JSONデータを配列に変換して処理をします。


$array_data = json_decode($json_string);

 
json_decode()関数の第二引数に true を設定すると連想配列になります。


// JSONを連想配列に変換
$arr = json_decode($json, true);

// 連想配列へのアクセス方法
echo $arr['res']['blogData']['id'];

 
json_decode関数の第二引数に何も指定をしない場合は stdClass に変換されます。


// JSONを stdClass に変換
$arr = json_decode($json);

// stdClassのメンバへアクセス方法
echo $arr->res->blogData->id;

 

ポイント
stdClass とは?

プロパティやメソッドがなく、ほとんど空っぽのクラスみたいなもの。一旦インスタンスを生成すると存在しないプロパティに自由にアクセスできるようになります。

 
以上です。

 

独習PHP 第3版

作者の山田 祥寛さんはJavaやJavaScriptなどの本も出されている方です。どの本も説明が丁寧でとても分かりやすいと定評があります。独習シリーズはいろいろな言語で出版されており、何かしら読んだことがある人も多いと思います。PHP をきちんと理解していないと Laravel は理解できません。これから Laravel で開発をしていく人は、もしもの(行き詰った) 時のために一冊購入してみてはいかがでしょうか?

Amazonで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-周辺知識