私は他の Web サイトからコンテンツをキャプチャする多くの製品に携わっており、便利で高速な file_get_contents 関数の使用には慣れていますが、次の例に従ってタイムアウトを設定しても、常に取得に失敗するという問題に遭遇します。マニュアルに従っても、ほとんどの場合は機能しません:
$config['context'] = stream_context_create(array(‘http’ =< array(‘method’ =< “GET”, ’timeout’ =< 5//这个超时时间不稳定,经常不奏效 ) ));
この時点で、サーバーの接続プールを見ると、同様のエラーが大量に見つかり、頭痛の種になります:
file_get_contents(http: //***): ストリームを開けませんでした...
最後の手段として、curl ライブラリをインストールし、関数の置き換えを書きました:
function curl_file_get_contents($durl){ $ch=curl_init(); curl_setopt($ch, CURLOPT_URL,$durl); curl_setopt($ch, CURLOPT_TIMEOUT,5); curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); curl_setopt($ch, CURLOPT_REFERER,_REFERER_); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $r=curl_exec($ch); curl_close($ch); return $r; }
このようにして、実際のネットワークの問題を除いて、問題は発生しませんでした。
これは他の人が行ったcurlとfile_get_contentsに関するテストです:
file_get_contentsがgoogle.comをクロールするのにかかる秒数: 53889
2.30124092
の使用時間カール:
0.68719101
0.64675593
0.64326
0.81983113
0.63956594
その差は大きいですよね?あはは、私の経験から言えば、これら 2 つのツールは速度が異なるだけでなく、安定性も異なります。ネットワーク データ キャプチャの安定性に対する要求が高い友人には、上記のcurl_file_get_contents関数を使用することをお勧めします。これは、安定して高速であるだけでなく、ブラウザを偽装してターゲット アドレスを偽装することもできます。
特別な注意: PHP バージョンが異なると、テスト結果が異なる場合があります。PHP5.2 では、file_get_contents 関数が特に効率が悪く、CPU を過剰に占有する傾向があります。テスト後は、PHP5.3 にアップグレードすることをお勧めします。 PHP5.3では動作します そのような問題はありません