做过好多抓取别家网站内容的产品,习惯了使用方便快捷的file_get_contents函数,但是总是会遇到获取失败的问题,尽管按照手册中的例子设置了超时,可多数时候不会奏效:
$config['context'] = stream_context_create(array(‘http’ => array(‘method’ => “GET”,
’timeout’ => 5//这个超时时间不稳定,经常不奏效
)
));
这时候,看一下服务器的连接池,会发现一堆类似的错误,让你头疼万分:
file_get_contents(http://***): failed to open stream…
不得已,安装了curl库,写了一个函数替换:
function 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, _USERAGENT_);
curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r = curl_exec($ch);
curl_close($ch);
return $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函数,不但稳定速度快,还能假冒浏览器欺骗目标地址哦!
本站内容受著作权法保护。个人 blog 转载时请遵循 “
署名-非商业用途-保持一致” 的创作共用协议;商业网站或未授权媒体不得复制本站内容。
分享到:
相关推荐
在示例代码中,`curl_file_get_contents`函数展示了如何使用`cURL`来替换`file_get_contents`,通过`curl_init`初始化一个会话,然后设置`CURLOPT_URL`、`CURLOPT_TIMEOUT`、`CURLOPT_USERAGENT`等选项,以实现类似...
总的来说,`curl_get_contents`函数提供了一种在`file_get_contents`可能不稳定时的替代方案,利用`curl`库的稳定性和灵活性,确保了请求的及时性和系统的资源效率。同时,开发者可以根据自己的项目需求,结合`curl`...
1. **PHP `file_get_contents` 与 `cURL` 比较**:`file_get_contents` 简单易用,但在处理复杂的HTTP请求和需要更高级功能(如重定向、cookie管理等)时,`cURL` 提供了更多灵活性和控制。 2. **性能考虑**:在...
file_get_contents代替使用curl其实不多见了,但有时你碰到服务器不支持curl时我们可以使用file_get_contents代替使用curl,下面看个例子。 当用尽一切办法发现 服务器真的无法使用curl时。或者curl不支持https时。...
关于 `file_get_contents` 和 `curl` 的性能和稳定性,通常 `file_get_contents` 在本地文件系统操作上表现更优,而 `curl` 在处理复杂的HTTP请求和网络问题时更具优势。`curl` 支持更多的协议,如FTP、SMTP等,且...
与file_get_contents()和fopen()不同,curl是一个功能强大的命令行工具,它同样也是PHP的一个扩展库。curl提供了一种更加灵活的方式来处理各种HTTP请求,包括GET、POST、PUT等多种请求方式。更重要的是,curl在请求...
$contents = curl_exec($ch); curl_close($ch); echo $contents; ?> ``` 在这个例子中,`curl_init()` 初始化一个cURL会话,`curl_setopt()` 设置各种选项,如URL、返回类型和超时时间。如果目标网站需要HTTP认证,...
当使用file_get_contents函数直接下载图片时,如果没有考虑到服务器可能返回的压缩内容,就可能会导致获取到的数据无法被正确解析为图片,从而出现损坏。同样的,使用cURL获取内容时,如果不设置正确的HTTP头信息...
如果你使用file_get_contents获取远程文件内容返回为空或提示该函数不可用,也许本文能帮到你! 使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置allow_url_fopen = On,allow_url...
在PHP中,获取远程内容的方法主要有...在性能方面,Curl 和 `file_get_contents` 的差异可能因具体条件而异,但通常 Curl 更具优势,尤其是在稳定性上。在处理远程数据抓取时,如果对稳定性有较高要求,推荐使用 Curl。
下面是file_get_contents和curl两个函数同样功能的不同写法file_get_contents函数的使用示例:复制代码 代码如下:< ?php$file_contents = file_get_contents(‘https://www.jb51.net’);echo $file_...
在处理超时问题时,可以采取一种试探性的处理方法,即在file_get_contents函数失败返回FALSE时,不是立即放弃,而是尝试重新执行该函数,类似于JavaScript中settimeout的逻辑。但需要注意的是,超时重试应有一定的...
此时,切换到`curl`,通过`curl_setopt`设置超时、用户代理等参数,可以显著提高稳定性和成功率。 以下是一个简单的性能对比测试,结果显示`curl`的执行速度通常快于`file_get_contents`。这种差异可能源于`curl`的...
总的来说,解决 PHP 使用 `file_get_contents` 抓取网页中文乱码问题的关键在于理解 HTTP 编码头信息、正确处理 GZIP 压缩以及确保字符编码转换的准确性。使用 `cURL` 或 `zlib` 结合合适的编码转换方法,可以有效地...
如果您无法修改服务器配置,或者上述方法不适用,您可以选择使用cURL库来代替 `file_get_contents`。cURL是一个强大的URL传输库,支持多种协议,包括HTTPS。下面是一个使用cURL的示例函数 `http_request`,它封装了...