ホームページ >バックエンド開発 >PHPチュートリアル >PHPのfile_get_contents関数とcurl()関数の比較_PHPチュートリアル

PHPのfile_get_contents関数とcurl()関数の比較_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:44:471204ブラウズ

PHPではfile_get_contents関数とcurl()関数の両方を使って相手のWebサイトのデータを取得してローカルサーバーに保存することができますが、一般的にはfile_get_contents()関数の方が若干効率が悪くなります。はい、マルチスレッドはサポートされていますが、curl 拡張機能をオンにする必要があります。つまり、curl 関数を使用するには、curl 拡張機能をオンにする必要があり、file_get_contents 関数システムが有効になります。デフォルト。

カール拡張機能を有効にする手順は次のとおりです:

1. PHP フォルダー内の 3 つのファイル php_curl.dll、libay32.dll、および ssleay32.dll を system32 にコピーします。 2. php.ini (c:WINDOWS ディレクトリ) の extension=php_curl.dll からセミコロンを削除します。

3. Apache または IIS を再起動します。

まず 2 つの関数の簡単な例を見てみましょう

curl()関数

コードは次のとおりですコードをコピー
$ch =curl_init("http://www.bKjia.c0m/");

curl_exec($ch);
curl_close($ch);

//$ch =curl_init("収集される URL");curl_init() 関数の機能は、curl セッションを初期化することです

//curl_exec($ch); $ch を実行します

//curl_close($ch); $ch を閉じる

file_get_contents関数

コードは次のとおりですコードをコピー echo file_get_contents("http://www.hzhuti.com");
?>
出力:

コードは次のとおりですコードをコピー
これはテストテキストを含むテストファイルです。

概要

fopen / file_get_contents はリクエストごとに DNS クエリを再実行し、DNS 情報をキャッシュしません。

ただし、CURL は DNS 情報を自動的にキャッシュします。同じドメイン名の Web ページまたは画像に対するリクエストには、DNS クエリが 1 つだけ必要です。これにより、DNS クエリの数が大幅に削減されます。
したがって、CURL のパフォーマンスは fopen/file_get_contents よりもはるかに優れています。


file_get_contents と CURL の効率と安定性の問題

コードは次のとおりですコードをコピー
$config['context'] = stream_context_create(array('http' => array('method' => "GET",'timeout' => 5)));

'timeout' => 5//このタイムアウトは不安定で、多くの場合使用が困難です。この時点で、サーバーの接続プールを見ると、次のようなエラーが大量に見つかり、頭痛の種になります:


コードは次のとおりですfile_get_contents(http://***): ストリームを開けませんでした…

最後の手段として、curl ライブラリをインストールし、関数の置換を作成しました。

コードをコピー
コードは次のとおりですコードをコピー これは他の人がcurlとfile_get_contentsで行ったテストです: file_get_contents が google.com をクロールするのにかかる秒数:
関数curl_get_contents($url)

{
$ch =curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //アクセスしたURLアドレスを設定します
//curl_setopt($ch,CURLOPT_HEADER,1) //ヘッダー情報を表示するかどうか
; curl_setopt($ch, CURLOPT_TIMEOUT, 5) //タイムアウトを設定します
; curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); // ユーザー アクセス エージェント User-Agent
curl_setopt($ch, CURLOPT_REFERER,_REFERER_) // リファラーを設定します
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //トラック 301
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) // 結果を返す
$r =curl_exec($ch); カール_クローズ($ch); $r を返します
}



したがって、実際のネットワークの問題以外の問題はなくなりました。



コードは次のとおりです

コードをコピー1.2.31319094 2.2.30374217 3.2.21512604 では、サーバーの状況に応じて file_get_contents またはcurl() をどのように使用するのでしょうか? 以下では、function_exists 関数を使用して、PHP が関数をサポートしているかどうかを判断できます。
4.3.30553889

5.2.30124092

カールの使用時間:

1.0.68719101

2.0.64675593

3.0.64326

4.0.81983113

5.0.63956594



コードは次のとおりです

コードをコピー if(function_exists('file_get_contents')) { $file_contents = ファイル_get_contents($url); } その他 { tru​​e
関数 vita_get_url_content($url) {
$ch =curl_init(); $タイムアウト = 5; curl_setopt ($ch、CURLOPT_URL、$url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch、CURLOPT_CONNECTTIMEOUT、$timeout); $file_contents =curl_exec($ch); カール_クローズ($ch); }

$file_contents を返す
}
?>










http://www.bkjia.com/PHPjc/633083.html

www.bkjia.com

http://www.bkjia.com/PHPjc/633083.html技術記事 PHPでは、file_get_contents関数とcurl()関数の両方を使用して、相手のWebサイトのデータを取得してローカルサーバーに保存できますが、一般的に言うと、file_get_contents()関数は効率が若干低く、失敗することがよくあります...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。