多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > php file_get_contents與curl()函數對比

php file_get_contents與curl()函數對比

來源:程序員人生   發布時間:2014-03-27 04:18:46 閱讀次數:4391次

在php中file_get_contents與curl()函數都可以用來抓取對方網站的數據并保存到本地服務器中,但是總得來講file_get_contents()效率稍低些,常用失敗的情況、curl()效率挺高的,支持多線程,不過需要開啟下curl擴展,也就是說要使用curl函數就必須要打開curl擴展了,而file_get_contents函數系統是默認的。

下面是curl擴展開啟的步驟

1、將PHP文件夾下的三個文件php_curl.dll,libeay32.dll,ssleay32.dll復制到system32下; 

2、將php.ini(c:WINDOWS目錄下)中的;extension=php_curl.dll中的分號去掉;

3、重啟apache或者IIS。

我們先來看看兩個函數的簡單實例.

curl()函數,代碼如下:

  1. $ch = curl_init("http://www.phpfensi.com/"); 
  2. curl_exec($ch); 
  3. curl_close($ch); 
  4. //$ch = curl_init("要采集的網址");  curl_init()函數的作用初始化一個curl會話 
  5. //curl_exec($ch);執行$ch 
  6. //curl_close($ch); 關閉$ch 

file_get_contents函數,代碼如下:

  1. <?php 
  2. echo file_get_contents("http://www.phpfensi.com"); 
  3. ?> 
  4. //輸出:This is a test file with test text. 

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

file_get_contents與curl效率及穩定性問題,代碼如下:

  1. $config['context'] = stream_context_create(array('http' => array('method' => "GET",'timeout' => 5)));   
  2. 'timeout' => 5 

這個超時時間不穩定,經常不好使,這時候,看一下服務器的連接池,會發現一堆類似下面的錯誤,讓你頭疼萬分,代碼如下:

file_get_contents(http://***): failed to open stream… 

不得已,安裝了curl庫,寫了一個函數替換,代碼如下:

  1. function curl_get_contents($url)    
  2. {    
  3.    $ch = curl_init();    
  4.    curl_setopt($ch, CURLOPT_URL, $url);            //設置訪問的url地址    
  5.    //curl_setopt($ch,CURLOPT_HEADER,1);            //是否顯示頭部信息   
  6.    curl_setopt($ch, CURLOPT_TIMEOUT, 5);           //設置超時    
  7.    curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);   //用戶訪問代理 User-Agent    
  8.    curl_setopt($ch, CURLOPT_REFERER,_REFERER_);        //設置 referer    
  9.     curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);      //跟蹤301    
  10.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        //返回結果    
  11.     $r = curl_exec($ch);    
  12.     curl_close($ch);    
  13.     return $r;    
  14. }  

如此,除了真正的網絡問題外,沒再出現任何問題,這是別人做過的關于curl和file_get_contents的測試,file_get_contents抓取google.com需用秒數,代碼如下:

1.2.31319094   

2.2.30374217   

3.2.21512604   

4.3.30553889   

5.2.30124092 

curl使用的時間:

1.0.68719101   

2.0.64675593   

3.0.64326   

4.0.81983113

5.0.63956594

那么如何根據服務器情況來使用file_get_contents還是curl()呢,下面我們可以利用function_exists函數來判斷php是否支持一個函數可以輕松寫出下面函數,代碼如下:

  1. <?php  
  2.  function vita_get_url_content($url) {  
  3.  if(function_exists('file_get_contents')) {  
  4.  $file_contents = file_get_contents($url);  
  5.  } else {  
  6.  $ch = curl_init();  
  7.  $timeout = 5;   
  8.  curl_setopt ($ch, CURLOPT_URL, $url);  
  9.  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);   
  10.  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
  11.  $file_contents = curl_exec($ch);  
  12.  curl_close($ch);  
  13.  }  
  14.  return $file_contents;  
  15.  }  
  16.  ?> 
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 91国内 | 中文乱码视亚洲 | 国产老女人 | 97热久久免费频精品99国产成人 | 另类专区国产在线视频 | 欧美一级毛片欧美一级成人毛片 | 亚洲欧美国产精品第1页 | 日本精品一区二区三本中文 | 国产福利在线看 | 爱爱www在线观看视频高清 | 综合婷婷丁香 | a免费国产一级特黄aa大 | 欧美一区二区三区高清不卡tv | 中文字幕成人在线 | 国产男人女人做性全过程视频 | 在线播放性xxx欧美 在线播放亚洲美女视频网站 | 日本 欧美 在线 | 欧美一区二区三区在线观看不卡 | 国产精品国产亚洲精品不卡 | 一区二区中文字幕亚洲精品 | xxxxx国产| 香蕉福利视频 | 亚洲天天综合 | 亚洲爱爱图 | 91在线色| 性欧美videos另类hd | 日韩欧美亚洲国产精品字幕久久久 | 在线免费激情视频 | 国产精品成人免费 | 国产日韩欧美在线一区二区三区 | 2022国产男人亚洲欧美天堂 | 欧洲黄色毛片 | 毛片免费在线播放 | 欧美成人午夜在线全部免费 | 色综合天天综合网国产成人网 | 日本高清无卡码一区二区久久 | 色综合在 | 久爱精品视频在线视频 | 国产精品爱久久 | 国产农村精品一级毛片视频 | 欧美精品videosex极品 |