CURLよりfile_get_contents()
PHP Advent Calendar jp 2010 10日目です。
Webサーバーから、JSONやXMLを取ってきたり、あるいはWebサーバーへそれらを投げたりする事がありますね。
自分はそういう時はCURL関数よりfile_get_contents()を使います。何といっても簡単で分かりやすい、と思っています。
function get($url, array $params = array(), array $headers = array()) { $queryString = http_build_query($params); if (strlen($queryString) > 0) { $url .= '?' . $queryString; } $header = implode("\r\n", $headers); $options = array( 'http' => array( 'method' => 'GET', 'header' => $header ) ); $context = stream_context_create($options); return file_get_contents($url, false, $context); }
array( 'method' => 'POST', 'header' => $header, 'content' => $content ) ); $context = stream_context_create($options); return file_get_contents($url, false, $context); }
こんな感じです。このままだと、get()はクエリストリングのある$urlに対応していないなど、色々と問題がありますが、実務で使う時は、クラス化してエラー処理を入れたりともう少し丁寧に書きます。
WebサービスAPIと通信を行う場合は、認証が必要な場合があります。4日目ご担当のredsnowさんが既に書いておられるのですが、IDとパスワードをbase64_encode()でエンコードしたAuthorization: Basic ヘッダを'header'に含めると、手軽にBasic認証をパス出来ます。
マニュアルはこちら。
Webサーバーにファイルをアップロードしたい場合は、CURLを使わないといけないでしょうか?
何もCURLに恨みがあるわけではないのですが、「便利な機能、好きなテクニック、興味のあるネタ」という事でfile_get_contents()についてエントリを書いてみました。皆さん、かなり高度な事を書いておられるのに簡単な内容で恐縮です。
明日はyuyakさんです。