既存のソースを殆ど変えずにfile_get_contents()をcURLにする

既存のソースを殆ど変えずにfile_get_contents()をcURLにする

PHPで外部ファイルを読み込むとき用に用意されている、file_get_contents関数ですが、一部の外部サイトを上手く読み込めなかったり、タイムアウトを指定していてもタイムアウトされなかったりとAPIなどのデータを取得するには向いていない関数です。

なので、file_get_contents関数よりも速くで、file_get_contents関数で上手く読み込めないサイトを読み込めたりできる、cURLを既存のソースの一部を置換するだけで使用できる方法を紹介します。

curl_get_contents

以下の関数をファイルの最初に追加し、file_get_contents()をcurl_get_contents()に置き換えるだけで、file_get_contents関数がcURLになります。

function curl_get_contents( $url ){
  $ch = curl_init();
  curl_setopt( $ch, CURLOPT_URL, $url );
  curl_setopt( $ch, CURLOPT_HEADER, false );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt( $ch, CURLOPT_TIMEOUT, 5 );
  curl_setopt( $ch, CURLOPT_FAILONERROR, true );
  $result = curl_exec( $ch );
  curl_close( $ch );
  return $result;
}

サンプル

file_get_contents( './foo.jpg' );
curl_get_contents( './foo.jpg' );