file_get_contents file_get_contents和curl

file_get_contents file_get_contents和curl

我做过很多抓取其他网站内容的产品,也习惯了使用方便快捷的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下测试过。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论