Posted on

PHPプログラム内から他のプログラムにGET,POSTで引数を渡して戻り値を得る方法

あるPHPプログラムから他のプログラムを呼び出す、ということが時々あります。
API的に独立したプログラムに引数を渡して、結果を戻り値で得る、というような場合ですね。

そんな時、使うのがfile系の関数。
file_(f)ではじまるファイルを操作する関数は、同時にURLに対しても同じように動作する、という仕様に驚きを隠せないのは僕だけでしょうか。

URLが指し示すプログラムに対してfopenで開いてから引数を渡して戻り地を得る、という流れでももちろんできるようなのですが、今日のタイトルのように引数を渡して戻り値を得るだけであれば、

file_get_contents

関数を使うのが便利かと思います。

例えばPOSTで渡す場合は以下のようにします。

// 引数として渡す値を準備
$sendData = array(
'fruits' => array('apple', 'banana', 'grape'),
'vegetables' => array('carrot', 'cabbage ', 'potato')
);
// 引数をURLエンコード
$query = http_build_query($sendData);
// ヘッダーを設定
$header = array(
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.strlen($query) // 引数の長さを設定
);
// file_get_contentsに指定するオプションを設定
$option = array('http' => array(
'method' => 'POST', // POSTを指定
'header' => implode("\r\n", $header) // ヘッダ
'content' => $query,  // 引数
));
// 引数を渡して戻り値を取得
$result = file_get_contents(’http://www.example.co.jp/example.php’, false, stream_context_create($option));

これで$resultに戻り値が入ってきます。

GETを指定する場合には、$optionのmethodを’GET’にするだけ……でうまくいけばいいんですけど、そうはいかないようです。^^);
$optionのmethodを’GET’にした上で、file_get_contentに渡すURLに

$url = 'http://www.example.co.jp/example.php?'. $query;

のようにして引数を付加し、$optionのcontentは何も指定しないようにしたらうまくいくようです。

POSTとGETの場合の使い方の微妙な違いに注意する必要がありますが、やっぱり便利です。
これからも機会があれば使っていきたいと思います☆