ホームページ バックエンド開発 PHPチュートリアル php file_get_contents とcurl_PHP チュートリアルのパフォーマンス比較

php file_get_contents とcurl_PHP チュートリアルのパフォーマンス比較

Jul 13, 2016 am 10:47 AM
curl file get php そして 分析する 行く 存在する パフォーマンス 比較する

php でパフォーマンスを注意深く分析しないと、file_get_contents とcurl には両方ともファイルを収集することもできるし、ファイルを開くこともできるという共通点がたくさんあることがわかります。しかし、注意深く比較してみると、多くの違いがあることがわかります。 file_get_contents との違いを見てください。

PHP の fopen、file_get_contents、curl 関数の違い:

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

2.fopen /file_get_contents HTTP リクエストの場合、http_fopen_wrapper が使用され、キープライブされません。しかしカールならできる。このようにして、複数のリンクを複数回リクエストする場合、curl はより効率的になります。


3. fopen / file_get_contents 関数は、php.ini ファイルのallow_url_open オプション設定の影響を受けます。設定がオフになっている場合、この機能は無効になります。 Curl はこの設定の影響を受けません。


4.curl は、POST データ、フォーム送信など、さまざまなリクエストをシミュレートできます。ユーザーは、独自のニーズに応じてリクエストをカスタマイズできます。また、fopen/file_get_contents は get メソッドのみを使用してデータを取得できます。

file_get_contents はリモート ファイルを取得するときに結果を文字列に保存し、fields 関数は結果を配列に保存します
したがって、私は依然として、リモート URL にアクセスするために、curl を使用することを好みます。 Phpにはcurlモジュール拡張機能があり、これは非常に強力です。

長く話すと、パフォーマンスでは比較にならないと言われるかもしれませんので、見てみましょう


最近、他人のサイトから音楽データを入手する必要があります。 file_get_contents 関数を使用しましたが、マニュアルの例に従ってタイムアウトを設定しても、ほとんどの場合機能しませんでした。

コードは次のとおりですコードをコピー$config['context'] = stream_context_create(array('http' => array('method' => "GET",
) 'timeout' => 5//このタイムアウトは不安定で、動作しないことがよくあります
)
));
この時点で、サーバーの接続プールを見ると、同様のエラーが大量に見つかり、非常に頭が痛くなります。

コードは次のとおりですコードをコピーfile_get_contents(http://***): ストリームを開けませんでした…
ここで、curl ライブラリを使用して、関数の置換を作成しました:

コードは次のとおりですコードをコピー関数curl_file_get_contents($durl){

したがって、実際のネットワークの問題以外の問題はなくなりました。
これは他の人がcurlとfile_get_contentsで行ったテストです:
file_get_contents が google.com をクロールするのにかかる秒数:

2.31319094

2.30374217
2.21512604
3.30553889
2.30124092

カールの使用時間:

0.68719101

0.64675593
0.64326
0.81983113
0.63956594

大きなギャップはありますか?あはは、私の経験から言えば、これら 2 つのツールは速度が異なるだけでなく、安定性も異なります。

ネットワーク データ キャプチャの安定性に対する要求が高い友人には、上記のcurl_file_get_contents関数を使用することをお勧めします。安定して高速であるだけでなく、ブラウザを偽装してターゲット アドレスを偽装することもできます。

別の例を見てみましょう

curl と file_get_contents のパフォーマンス比較に加えて、curl と file_get_contents のパフォーマンス比較も後で掲載します。その前に、次の結果グラフをご覧ください。

php file_get_contents とcurl_PHP チュートリアルのパフォーマンス比較curl と file_get_contents PHP ソース コードのパフォーマンスの比較は次のとおりです:

$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);
$r;
を返します }
代码如下 复制幣

<?php
/**

* 淘宝網 IP インターフェイスを通じて IP 地理的位置を取得します

* @param 文字列 $ip

* @return: 文字列

**/
関数 getCityCurl($ip)
{
    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
    $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);
 
    $ipinfo=json_decode($file_contents);
    if($ipinfo->code=='1'){
        false を返します。
    }
    $city = $ipinfo->data->region.$ipinfo->data->city;
    $city を返します。
}
 
関数 getCity($ip)
{
    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
    $ipinfo=json_decode(file_get_contents($url));
    if($ipinfo->code=='1'){
        false を返します。
    }
    $city = $ipinfo->data->region.$ipinfo->data->city;
    $city を返します。
}
 
// file_get_contents 用
$startTime=explode(' ',microtime());
$startTime=$startTime[0] + $startTime[1];
for($i=1;$i<=10;$i++)
{
   echo getCity("121.207.247.202")."</br>";
}
$endTime =explode(' ',microtime());
$endTime = $endTime[0] + $endTime[1];
$totalTime = $endTime - $startTime;
echo 'file_get_contents:'.number_format($totalTime, 10, '.', "")." 秒
";
 
//カール用
$startTime2=explode(' ',microtime());
$startTime2=$startTime2[0] + $startTime2[1];
for($i=1;$i<=10;$i++)
{
   echo getCityCurl('121.207.247.202')."</br>";
}
$endTime2 =explode(' ',microtime());
$endTime2=$endTime2[0] + $endTime2[1];
$totalTime2 = $endTime2 - $startTime2;
echo "curl:".number_format($totalTime2, 10, '.', "")." 秒";
?>

テストアクセス

http://www.bKjia.c0m

file_get_contents 速度: 4.2404510975 秒
カール速度:2.8205530643秒

curl は file_get_contents よりも約 30% 高速であり、最も重要なことはサーバーの負荷が低いことです。

概要

file_get_contentsの処理が頻繁で小さい場合に使うと良い感じです。何も珍しいことはありません。ファイルが 1,000 人以上によって処理された場合。その後、サーバーの CPU はブーストを待っています。したがって、今後 PHP コードを作成する際には、curl ライブラリを使用することをお勧めします。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632891.html技術記事 php では、パフォーマンスを注意深く分析しないと、file_get_contents とcurl には両方ともファイルを収集することもファイルを開くこともできる多くの共通点があることがわかりますが、注意深く比較すると...
ことがわかります。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles