最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php中file_get_contents與curl性能比較分析

 更新時間:2014年11月08日 12:16:30   投稿:shichen2014  
這篇文章主要介紹了php中file_get_contents與curl性能比較,以實例形式詳細分析了file_get_contents與curl的區(qū)別以及運行效率的對比,需要的朋友可以參考下

本文實例講述了php中file_get_contents與curl性能比較分析。分享給大家供大家參考。具體如下:

在php中如果不仔細的去分析性能會發(fā)現file_get_contents與curl兩個同很多共同點的,他們都可以采集文件打開文件,但是如果仔細一對比會發(fā)現很多不同點,下面我們一起來看看file_get_contents與curl區(qū)別。

PHP中fopen,file_get_contents,curl函數的區(qū)別:

1.fopen /file_get_contents 每次請求都會重新做DNS查詢,并不對 DNS信息進行緩存。但是CURL會自動對DNS信息進行緩存。對同一域名下的網頁或者圖片的請求只需要一次DNS查詢。這大大減少了DNS查詢的次數。所以CURL的性能比fopen /file_get_contents 好很多。

2.fopen /file_get_contents 在請求HTTP時,使用的是http_fopen_wrapper,不會keeplive。而curl卻可以。這樣在多次請求多個鏈接時,curl效率會好一些。

3.fopen / file_get_contents 函數會受到php.ini文件中allow_url_open選項配置的影響。如果該配置關閉了,則該函數也就失效了。而curl不受該配置的影響。

4.curl 可以模擬多種請求,例如:POST數據,表單提交等,用戶可以按照自己的需求來定制請求。而fopen / file_get_contents只能使用get方式獲取數據。
file_get_contents 獲取遠程文件時會把結果都存在一個字符串中 fiels函數則會儲存成數組形式

因此,我還是比較傾向于使用curl來訪問遠程url。Php有curl模塊擴展,功能很是強大。

說了半天大家可能說性能怎么沒對比呢,那我們就來看看

最近需要獲取別人網站上的音樂數據。用了file_get_contents函數,但是總是會遇到獲取失敗的問題,盡管按照手冊中的 例子設置了超時,可多數時候不會奏效:

復制代碼 代碼如下:
$config['context'] = stream_context_create(array('http' => array('method' => "GET",
   'timeout' => 5//這個超時時間不穩(wěn)定,經常不奏效
   )
));

這時候,看一下服務器的連接池,會發(fā)現一堆類似的錯誤,讓我頭疼萬分:

file_get_contents(http://***): failed to open stream…
現在改用了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需用秒數:
 
2.31319094
2.30374217
2.21512604
3.30553889
2.30124092
curl使用的時間:
 
0.68719101
0.64675593
0.64326
0.81983113
0.63956594

差距很大?呵呵,從我使用的經驗來說,這兩個工具不只是速度有差異,穩(wěn)定性也相差很大。

建議對網絡數據抓取穩(wěn)定性要求比較高的朋友使用上面的 curl_file_get_contents函數,不但穩(wěn)定速度快,還能假冒瀏覽器欺騙目標地址哦

再看一個實例

后續(xù)貼出了curl和file_get_contents的對比結果,這邊除了curl與file_get_contents的性能對比,還包含了他們的性能對比,講之前看下如下的結果圖:

curl與file_get_contents性能對比PHP源代碼如下:

復制代碼 代碼如下:
<?php
/**
 
* 通過淘寶IP接口獲取IP地理位置
 
* @param string $ip
 
* @return: string
 
**/
function getCityCurl($ip)
{
    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; 
    $ch = curl_init();
    $timeout = 5;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);
 
    $ipinfo=json_decode($file_contents);
    if($ipinfo->code=='1'){
        return false;
    }
    $city = $ipinfo->data->region.$ipinfo->data->city;
    return $city;
}
 
function getCity($ip)

    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; 
    $ipinfo=json_decode(file_get_contents($url));
    if($ipinfo->code=='1'){
        return false;
    }
    $city = $ipinfo->data->region.$ipinfo->data->city;
    return $city;
}
 
// for 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, '.', "")." seconds</br>";
 
//for curl
$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, '.', "")." seconds";
?>

測試訪問
http://m.fzitv.net
file_get_contents速度:4.2404510975 seconds
curl速度:2.8205530643 seconds
curl比file_get_contents速度快了30%左右,最重要的是服務器負載更低.

總結

file_get_contents處理頻繁小的時候,用它感覺挺好的。沒什么異常。如果你的文件被1k+人處理。那么你的服務器cpu就等著高升吧。所以建議自己和大家在以后寫php代碼的時候使用curl庫。

希望本文所述對大家的PHP程序設計有所幫助。

相關文章

  • Mysql數據庫操作類( 1127版,提供源碼下載 )

    Mysql數據庫操作類( 1127版,提供源碼下載 )

    Mysql數據庫操作類,學習php的朋友可以參考下。
    2010-12-12
  • 奇怪的PHP引用效率問題分析

    奇怪的PHP引用效率問題分析

    最近寫了一個小的php程序處理日志中的ip,需要將每個日志中出現的ip都接上一個出現時間戳的鏈表,于是按行遍歷log日志并寫了一個update_timequeue的函數來插入時間戳節(jié)點
    2012-03-03
  • PHP中new static()與new self()的區(qū)別異同分析

    PHP中new static()與new self()的區(qū)別異同分析

    這篇文章主要介紹了PHP中new static()與new self()的區(qū)別異同分析,是很實用的技巧,需要的朋友可以參考下
    2014-08-08
  • PHP 分頁類(模仿google)-面試題目解答

    PHP 分頁類(模仿google)-面試題目解答

    今天去XX公司面試了,感覺很不理想。因為這一段時間都在加深Zend Framework,都沒練習常用函數和方法了。
    2009-09-09
  • PHP 遞歸效率分析

    PHP 遞歸效率分析

    PHP的遞歸效率一般認為是低效的。大概一年前,我寫了一篇博文,對三種遍歷樹的方法進行了比較,發(fā)現遞歸算法的效率最低。
    2009-11-11
  • PHP/ThinkPHP實現批量打包下載文件的方法示例

    PHP/ThinkPHP實現批量打包下載文件的方法示例

    最近因為工作的需要,要根據條件自動打包供下載的功能,查找相關資料終于解決了,所以下面這篇文章主要給大家介紹了利用PHP或者ThinkPHP如何實現批量打包下載文件的方法示例,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • PHP實現通過URL提取根域名

    PHP實現通過URL提取根域名

    本文給大家分享的是個人在做項目的時候遇到的,需要通過php實現從URL中提取根域名的代碼以及實現思路,有需要的小伙伴可以參考下
    2016-03-03
  • php+ajax實時輸入自動搜索匹配的方法

    php+ajax實時輸入自動搜索匹配的方法

    這篇文章主要介紹了php+ajax實時輸入自動搜索匹配的方法,實例分析了兩種實現方法,是非常實用的技巧,需要的朋友可以參考下
    2014-12-12
  • php圖像驗證碼生成代碼

    php圖像驗證碼生成代碼

    這篇文章主要為大家詳細
    介紹了php圖像驗證碼的生成代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • PHP字符編碼問題之GB2312 VS UTF-8解決方法

    PHP字符編碼問題之GB2312 VS UTF-8解決方法

    今天照著書隨便寫了段代碼,代碼意圖是將字符串使用str_split()函數進行分割成數組,英文好說,但分割中文(兩個中文一個數組單元)時就出問題了
    2011-06-06

最新評論

象州县| 辛集市| 延庆县| 武清区| 荆州市| 施甸县| 托里县| 灌阳县| 丹凤县| 师宗县| 比如县| 长沙市| 德州市| 庆云县| 砀山县| 平和县| 万全县| 日土县| 普格县| 黑河市| 思茅市| 德州市| 互助| 五大连池市| 大兴区| 榆中县| 澎湖县| 昌黎县| 松滋市| 正定县| 桓台县| 桃园市| 睢宁县| 永城市| 比如县| 太谷县| 清河县| 高邮市| 潢川县| 黔南| 南召县|