PHPメモ : file_get_contentsの代替にcURLを使う
この記事は賞味期限切れです。(更新から1年が経過しています)
PHPで外部のリソースを取得するのに大変便利なfile_get_contents関数ですが、
cURLの環境があるなら利用したほうがパフォーマンスがいいぞというお話。
パフォーマンスの差
具体的にどれくらいパフォーマンスが変わるのかというと…
モバイル回線のノートでYahoo!のトップページを取得してざっくり計測したところ、
- file_get_contents : 4秒前後
- cURL : 2秒前後
概ねこんな感じとなりました。
勿論時間帯や回線など様々な要因にもよりますが、
ちょっと無視出来ない数字ですね。
cURLを使う
簡単な使い方
- curl_init()で初期化
- curl_setopt()でオプションを設定して
- curl_exec()で実行
- curl_close()で終了
というのが一連の流れです。
curl_setoptで渡すオプションにより、cURLさんにどんな動作をさせるのかを設定します。
$url = "http://www.example.com";
$ch = curl_init(); // 1. 初期化
curl_setopt( $ch, CURLOPT_URL, $url ); // 2. オプションを設定
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec( $ch ); // 3. 実行してデータを得る
curl_close(); // 4. 終了
オプションについて
オプション一覧
cf) PHP: curl_setopt – Manual
今回使うものだけ軽くメモ。
- CURLOPT_URL
- アクセスするurlです。これがないと始まりません。
- CURLOPT_HEADER
- ヘッダ文字列を一緒に出力するかどうかのBoolean値。
邪魔なのでfalseにします。 - CURLOPT_RETURNTRANSFER
- curl_execの返り値を文字列にする為のBoolean値。
これをtrueにしてやらないと、データが直接出力されます。 - CURLOPT_TIMEOUT
- cURLさんに頑張ってもらう秒数です。
これを超えると諦めてfalseを返します。
関数にまとめてみる
簡単に使えるように関数にまとめてみます。
function curl_get_contents( $url, $timeout = 60 ){
$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, $timeout );
$result = curl_exec( $ch );
curl_close( $ch );
return $result;
}
// test
$result = curl_get_contents( "http://www.example.com", 120 );
第二引数はタイムアウトの秒数です。
おわりに
オプションを見るだけでも分かるように、cURLは他にも相当色々な事が出来そうです。
「Curl」だと別のプログラミング言語の事をさしてしまうので注意。
コメント