Mach3.laBlog

PHPメモ : file_get_contentsの代替にcURLを使う

この記事は賞味期限切れです。(更新から1年が経過しています)

PHPで外部のリソースを取得するのに大変便利なfile_get_contents関数ですが、
cURLの環境があるなら利用したほうがパフォーマンスがいいぞというお話。

file_get_contentsの代替にcURLを使う

パフォーマンスの差

具体的にどれくらいパフォーマンスが変わるのかというと…
モバイル回線のノートでYahoo!のトップページを取得してざっくり計測したところ、

  • file_get_contents : 4秒前後
  • cURL : 2秒前後

概ねこんな感じとなりました。
勿論時間帯や回線など様々な要因にもよりますが、
ちょっと無視出来ない数字ですね。

cURLを使う

簡単な使い方

cf) PHP: cURL – Manual

  1. curl_init()で初期化
  2. curl_setopt()でオプションを設定して
  3. curl_exec()で実行
  4. 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」だと別のプログラミング言語の事をさしてしまうので注意。

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

cURL | phi-labd41d8cd98f00b204e9800998ecf8427e
ファーストサーバでは、外部サーバからファイルを取得する | ムラッチドットコムd41d8cd98f00b204e9800998ecf8427e
ITキヲスク | 2010年12/19~12/25の週間ブックマークd41d8cd98f00b204e9800998ecf8427e