file_get_contensでPOSTリクエスト

file_get_contensでファイルパスの代わりにURLを指定することで、手軽かつ簡易に外部のサイトからソースを取得することができ、WebAPIからデータを取得するなどに重宝します。
ただ、PHPの日本語マニュアルで翻訳されてる範囲だけみるとGETの説明しかなく何となくPOSTできないのかも。といった雰囲気を醸し出しています。
http://php.net/manual/ja/function.file-get-contents.php
説明、パラメータ・・・・例、変更履歴、注意、参考のもう一段下のUser Contributed Notesをみると
‘method’  => ‘POST’,
と記述があります。
stream_context_createと合わせて使うことでfile_get_contensでもPOSTリクエストを送ることができレスポンスボディを取得できます。
curlを使う方法など他にも方法があるのですが、わりと手軽なのでfile_get_contensは個人的によく使います。
https://gist.github.com/akifumi-kamata/7dbe50185333baf2d882
リクエストに失敗した場合はfalseが返ります。
PHPのマニュアルにあるとおり、相手先のサーバーがIISだとPHPがエラーを返す場合があるらしいので、@付けエラー表示を抑制するなどの対応も行います。
リクエスト先がWebAPIなどで、HTTPのレスポンスコードが事後の処理に影響を及ぼす場合には、$http_response_header を合わせて使用します。
file_get_contensでリクエストを行うと$http_response_headerにレスポンスコードが格納されるので、内容を適宜チェックし、事後の処理を行う事ができます。
安易に対応するならこんな感じです。

$result = file_get_contens($url);
if($http_response_header[0] == "HTTP/1.1 200 OK"){
    echo "200 OK!";
}

環境によってcurlが使えないとかあれば file_get_contens の事を思い出して頂ければと。

PHP
スポンサーリンク
A4 WORKS Official BLOG