探讨file_get_contents与curl效率及稳定性的分析


Posted in PHP onJune 06, 2013

做过好多抓取别家网站内容的产品,习惯了使用方便快捷的file_get_contents函数,但是总是会遇到获取失败的问题,尽管按照手册中的例子设置了超时,可多数时候不会奏效:

$config['context'] = stream_context_create(array(‘http' => array(‘method' => “GET”,
   'timeout' => 5//这个超时时间不稳定,经常不奏效
   )
  ));

这时候,看一下服务器的连接池,会发现一堆类似的错误,让你头疼万分:
file_get_contents(http://***): failed to open stream…
不得已,安装了curl库,写了一个函数替换:
<span style="color:#000000; font-weight:bold">function</span> curl_file_get_contents<span style="color:#009900">(</span><span style="color:#000088">$durl</span><span style="color:#009900">)</span><span style="color:#009900">{</span>
   <span style="color:#000088">$ch</span> <span style="color:#339933">=</span> <span style="color:#990000">curl_init</span><span style="color:#009900">(</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
   <span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_URL<span style="color:#339933">,</span> <span style="color:#000088">$durl</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
   <span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_TIMEOUT<span style="color:#339933">,</span> <span style="color:#cc66cc">5</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
   <span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_USERAGENT<span style="color:#339933">,</span> _USERAGENT_<span style="color:#009900">)</span><span style="color:#339933">;</span>
   <span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_REFERER<span style="color:#339933">,</span>_REFERER_<span style="color:#009900">)</span><span style="color:#339933">;</span>
   <span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_RETURNTRANSFER<span style="color:#339933">,</span> <span style="color:#cc66cc">1</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
   <span style="color:#000088">$r</span> <span style="color:#339933">=</span> <span style="color:#990000">curl_exec</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
   <span style="color:#990000">curl_close</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
   <span style="color:#b1b100">return</span> <span style="color:#000088">$r</span><span style="color:#339933">;</span>
 <span style="color:#009900">}</span>

如此,除了真正的网络问题外,没再出现任何问题。
这是别人做过的关于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
差距很大吧?呵呵,从我使用的经验来说,这两个工具不只是速度有差异,稳定性也相差很大。建议对网络数据抓取稳定性要求比较高的朋友使用上面的curl_file_get_contents函数,不但稳定速度快,还能假冒浏览器欺骗目标地址哦!
PHP 相关文章推荐
PHP函数常用用法小结
Feb 08 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 PHP
php生成RSS订阅的方法
Feb 13 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
$_GET['goods_id']+0 的使用详解
Jun 06 #PHP
PHP编码规范的深入探讨
Jun 06 #PHP
PHP输出XML到页面的3种方法详解
Jun 06 #PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 #PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 #PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 #PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 #PHP
You might like
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
php网页后退不再出现过期
2007/03/08 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
js星星评分效果
2014/07/24 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
AngularJS实现注册表单验证功能
2017/10/16 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
详解在Python程序中自定义异常的方法
2015/10/16 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
中式婚礼主持词
2014/03/13 职场文书
搞笑征婚广告词
2014/03/17 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
护理医院见习报告
2014/11/03 职场文书
学校党员干部承诺书
2015/05/04 职场文书