麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > PHP > 正文

php file_get_contents與curl()函數對比

2024-09-04 11:48:10
字體:
來源:轉載
供稿:網友

在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.companysz.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.companysz.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.  ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人av一二三区 | 九一国产精品 | 日本中文不卡视频 | 成人毛片在线免费看 | 国产乱淫av一区二区三区 | 泰剧19禁啪啪无遮挡 | 国产亚洲综合精品 | 午夜视频亚洲 | 久草在线视频新 | 国产中文一区 | 亚洲精品a在线观看 | 亚洲啪啪| 中文字幕电影免费播放 | 性欧美xxxx免费岛国不卡电影 | 色播视频在线播放 | 欧美一级不卡视频 | 永久免费不卡在线观看黄网站 | 成人一级黄色 | 精品一区二区久久久久久按摩 | 欧美日韩亚州综合 | 国产精品午夜一区 | 免费国产一区 | 欧美成人精品一区二区 | 一区二区三区在线观看国产 | 亚洲精品无码不卡在线播放he | 久久经典国产视频 | 性少妇videosexfreexx入片 | 欧美成人国产va精品日本一级 | 蜜桃av鲁一鲁一鲁一鲁 | 中文字幕在线观看免费 | 黄 色 免费网 站 成 人 | 国产成人在线一区 | 欧美视频一区二区三区 | 一级做受大片免费视频 | 日本欧美一区二区三区在线播 | 国产精品高潮视频 | 欧美在线成人影院 | 黄色成人短视频 | 中文字幕免费一区 | 强伦女教师视频 | 嫩草91在线 |