我做过很多抓取其他网站内容的产品,也习惯了使用方便快捷的file_get_contents功能,但是总是遇到获取失败的问题。虽然我根据手册中的例子设置了超时,但大多数时候都不起作用:
$ config[‘ context ‘]= stream _ context _ create(array(‘ http ‘ = & lt;数组(‘ method ‘ = & lt“得到”,
超时’ = & lt5//这个超时不稳定,经常不行。
)
));
这时候看一下服务器的连接池,会发现一堆类似的错误,会让你很头疼:
file_get_contents(http://***):无法打开流…
作为最后的手段,安装了curl库并编写了一个函数替换:
函数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,_ user agent _);
curl_setopt($ch,CURLOPT_REFERER,_ REFERER _);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$ r = curl _ exec($ ch);
curl _ close($ ch);
返回$ 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
差距大吗?呵呵,以我的经验来看,这两个工具不仅速度不同,稳定性也大相径庭。建议对网络数据抓取的稳定性有较高要求的朋友使用上面的curl_file_get_contents函数,不仅稳定性快,还可以冒充浏览器欺骗目标地址!
需要特别注意的是:不同的php版本可能会有不同的测试结果。file_get_contents函数在php5.2下效率特别低,容易占用太多cpu。建议升级到php5.3,但是没有在php5.3下测试过。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。