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