最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php file_get_contents与curl()函数对比

    在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.  ?> 
    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php file_get_contents与curl()函数对比

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级