`
zhengdl126
  • 浏览: 2538500 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

file_get_contents与curl效率及稳定性问题

    博客分类:
  • php
阅读更多



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

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

这时候,看一下服务器的连接池,会发现一堆类似的错误,让你头疼万分:

file_get_contents(http://***): failed to open stream…

不得已,php.ini安装了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函数,不但稳定速度快,还能假冒浏览器欺骗目标地址哦!

分享到:
评论

相关推荐

    比file_get_contents稳定的curl_get_contents分享

    总的来说,`curl_get_contents`函数提供了一种在`file_get_contents`可能不稳定时的替代方案,利用`curl`库的稳定性和灵活性,确保了请求的及时性和系统的资源效率。同时,开发者可以根据自己的项目需求,结合`curl`...

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

    在示例代码中,`curl_file_get_contents`函数展示了如何使用`cURL`来替换`file_get_contents`,通过`curl_init`初始化一个会话,然后设置`CURLOPT_URL`、`CURLOPT_TIMEOUT`、`CURLOPT_USERAGENT`等选项,以实现类似...

    PHP file_get_contents 函数超时的几种解决方法

    1. **PHP `file_get_contents` 与 `cURL` 比较**:`file_get_contents` 简单易用,但在处理复杂的HTTP请求和需要更高级功能(如重定向、cookie管理等)时,`cURL` 提供了更多灵活性和控制。 2. **性能考虑**:在...

    深入file_get_contents与curl函数的详解

    关于 `file_get_contents` 和 `curl` 的性能和稳定性,通常 `file_get_contents` 在本地文件系统操作上表现更优,而 `curl` 在处理复杂的HTTP请求和网络问题时更具优势。`curl` 支持更多的协议,如FTP、SMTP等,且...

    php采用file_get_contents代替使用curl实例

    file_get_contents代替使用curl其实不多见了,但有时你碰到服务器不支持curl时我们可以使用file_get_contents代替使用curl,下面看个例子。 当用尽一切办法发现 服务器真的无法使用curl时。或者curl不支持https时。...

    php中file_get_content 和curl以及fopen 效率分析

    与file_get_contents()和fopen()不同,curl是一个功能强大的命令行工具,它同样也是PHP的一个扩展库。curl提供了一种更加灵活的方式来处理各种HTTP请求,包括GET、POST、PUT等多种请求方式。更重要的是,curl在请求...

    file_get_contents获取不到网页内容的解决方法

    本文将详细讲解当`file_get_contents`获取不到网页内容时,如何通过使用cURL库来解决这个问题。 首先,`file_get_contents` 的基本用法是这样的: ```php $content = file_get_contents('http://example.com'); ``...

    解决PHP curl或file_get_contents下载图片损坏或无法打开的问题

    当使用file_get_contents函数直接下载图片时,如果没有考虑到服务器可能返回的压缩内容,就可能会导致获取到的数据无法被正确解析为图片,从而出现损坏。同样的,使用cURL获取内容时,如果不设置正确的HTTP头信息...

    关于file_get_contents返回为空或函数不可用的解决方案

    如果你使用file_get_contents获取远程文件内容返回为空或提示该函数不可用,也许本文能帮到你! 使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置allow_url_fopen = On,allow_url...

    php中使用Curl、socket、file_get_contents三种方法POST提交数据

    在PHP中,获取远程内容的方法主要有...在性能方面,Curl 和 `file_get_contents` 的差异可能因具体条件而异,但通常 Curl 更具优势,尤其是在稳定性上。在处理远程数据抓取时,如果对稳定性有较高要求,推荐使用 Curl。

    PHP中使用file_get_contents抓取网页中文乱码问题解决方法

    总的来说,解决 PHP 使用 `file_get_contents` 抓取网页中文乱码问题的关键在于理解 HTTP 编码头信息、正确处理 GZIP 压缩以及确保字符编码转换的准确性。使用 `cURL` 或 `zlib` 结合合适的编码转换方法,可以有效地...

    php中file_get_contents与curl性能比较分析

    此时,切换到`curl`,通过`curl_setopt`设置超时、用户代理等参数,可以显著提高稳定性和成功率。 以下是一个简单的性能对比测试,结果显示`curl`的执行速度通常快于`file_get_contents`。这种差异可能源于`curl`的...

    PHP file_get_contents设置超时处理方法

    在处理超时问题时,可以采取一种试探性的处理方法,即在file_get_contents函数失败返回FALSE时,不是立即放弃,而是尝试重新执行该函数,类似于JavaScript中settimeout的逻辑。但需要注意的是,超时重试应有一定的...

    深入file_get_contents函数抓取内容失败的原因分析

    下面是file_get_contents和curl两个函数同样功能的不同写法file_get_contents函数的使用示例:复制代码 代码如下:< ?php$file_contents = file_get_contents(‘https://www.jb51.net’);echo $file_...

    解决file_get_contents无法请求https连接的方法

    然而,当尝试使用 `file_get_contents` 函数读取HTTPS(安全的HTTP)连接时,可能会遇到一些问题。这主要是由于PHP默认配置未启用必要的SSL/TLS支持。以下是针对这一问题的三种解决方案: 1. **Windows环境下**: ...

Global site tag (gtag.js) - Google Analytics