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さんです。