CURLよりfile_get_contents()

PHP Advent Calendar jp 2010 10日目です。

Webサーバーから、JSONXMLを取ってきたり、あるいは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さんです。