抓取纯文本页面内容,用file_get_contents费时大约1秒左右,chrome下直接打开测试发现才用来300ms。
1. 这是为何?
2. 要用curl?网络稳定,页面内容很少,仅文本。

解决方案 »

  1.   

    获取网络上的数据用curl好些,特别是在多次获取的时候,比file_get_contents快
    chrome 那个就不知道了
      

  2.   

    因为ping过发现时间大约在100ms,加上页面就少量文字,觉得1秒花的不值。
    会考虑试试curl
      

  3.   

    用curl试试。
      

  4.   

    你是如何计时的?方便的话可以把URL发出来让大家测试下。
      

  5.   

     microtime(true); 
    前后各一次相减.
    curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。
      

  6.   


    你说的没有错误,file_get_contents在多次访问同一url时,会出现偶尔慢,甚至无响应等情况。之前也一直没有搞清楚具体原因,通过浏览器发现一点也不慢,就没管,后来有次无意间读php源码,发现file_get_contents在发起请求时并不会发送"connection" HTTP头!!!若果不发送"connection" HTTP头,目标服务器会认为tcp请求还处在keep-alive,因此不会close,那么什时候才能close呢,这就得看目标网站的服务器配置了,有的是几秒有的可能更慢。可以通过wireshark抓包就能看到,用curl的话,目标网站会close tcp connection,而用file_get_contents时则不会。有一种解决方案,在使用时加上所需要的header,你可以试试,希望对你有帮助。$context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));
    file_get_contents("$your_url", false, $context);
      

  7.   

    还要继续测,好像一些jsondecode的工作影响也不少。我再确认一下
      

  8.   


    你说的没有错误,file_get_contents在多次访问同一url时,会出现偶尔慢,甚至无响应等情况。之前也一直没有搞清楚具体原因,通过浏览器发现一点也不慢,就没管,后来有次无意间读php源码,发现file_get_contents在发起请求时并不会发送"connection" HTTP头!!!若果不发送"connection" HTTP头,目标服务器会认为tcp请求还处在keep-alive,因此不会close,那么什时候才能close呢,这就得看目标网站的服务器配置了,有的是几秒有的可能更慢。可以通过wireshark抓包就能看到,用curl的话,目标网站会close tcp connection,而用file_get_contents时则不会。有一种解决方案,在使用时加上所需要的header,你可以试试,希望对你有帮助。$context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));
    file_get_contents("$your_url", false, $context);

    有加的
      

  9.   

     microtime(true); 
    前后各一次相减.
    curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。建议用curl吧,我已经把我的所有代码,用到file_get_contents获取网页内容的地方全部换成curl了。你可以自己封装一个更灵活的curl库,根据使用场景封装出用起来也一样方便的方法,毕竟curl强大得多呀。
      

  10.   


    你说的没有错误,file_get_contents在多次访问同一url时,会出现偶尔慢,甚至无响应等情况。之前也一直没有搞清楚具体原因,通过浏览器发现一点也不慢,就没管,后来有次无意间读php源码,发现file_get_contents在发起请求时并不会发送"connection" HTTP头!!!若果不发送"connection" HTTP头,目标服务器会认为tcp请求还处在keep-alive,因此不会close,那么什时候才能close呢,这就得看目标网站的服务器配置了,有的是几秒有的可能更慢。可以通过wireshark抓包就能看到,用curl的话,目标网站会close tcp connection,而用file_get_contents时则不会。有一种解决方案,在使用时加上所需要的header,你可以试试,希望对你有帮助。$context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));
    file_get_contents("$your_url", false, $context);

    有加的有没有可能是dns慢?
    ping your_url
    得到 url_ip
    试试呢?$context = stream_context_create(array('http' => array('header'=>'Host: $your_url\r\n')));
    file_get_contents("$url_ip", false, $context);
      

  11.   

     microtime(true); 
    前后各一次相减.
    curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。建议用curl吧,我已经把我的所有代码,用到file_get_contents获取网页内容的地方全部换成curl了。你可以自己封装一个更灵活的curl库,根据使用场景封装出用起来也一样方便的方法,毕竟curl强大得多呀。
    恩,好的,谢谢你的建议。还不太熟悉,我两个都试试。
      

  12.   


    你说的没有错误,file_get_contents在多次访问同一url时,会出现偶尔慢,甚至无响应等情况。之前也一直没有搞清楚具体原因,通过浏览器发现一点也不慢,就没管,后来有次无意间读php源码,发现file_get_contents在发起请求时并不会发送"connection" HTTP头!!!若果不发送"connection" HTTP头,目标服务器会认为tcp请求还处在keep-alive,因此不会close,那么什时候才能close呢,这就得看目标网站的服务器配置了,有的是几秒有的可能更慢。可以通过wireshark抓包就能看到,用curl的话,目标网站会close tcp connection,而用file_get_contents时则不会。有一种解决方案,在使用时加上所需要的header,你可以试试,希望对你有帮助。$context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));
    file_get_contents("$your_url", false, $context);

    有加的有没有可能是dns慢?
    ping your_url
    得到 url_ip
    试试呢?$context = stream_context_create(array('http' => array('header'=>'Host: $your_url\r\n')));
    file_get_contents("$url_ip", false, $context);

    同一台电脑呀,要慢不是一起慢么?都用的一个url
      

  13.   

    你本来是 file_get_contents 和 浏览器 比
    现在是 file_get_contents 和 curl 比
    你到底是想谁和谁比?其实攀比是没有必要的,网络上千变万化、服务器也有个响应时间问题具体问题要具体对待,用 curl 取不到的,用 file_get_contents 反而能取到。这种情况经常发生
      

  14.   

    浏览器咯,走题了。curl和file_get_contents相差不大,前者稍快,一起讨论呗。
    你说的这种情况有案例么?
    curl、file_get_contents这些我纯粹好奇,有详细的测试再贴上来
      

  15.   

    http://lvvbbe.com/questions/8148013/is-file-get-contents-slower-than-browser
      

  16.   

    dns缓存?
      

  17.   

    file_get_contents 慢到1秒 可能是网络问题 ,不然这函数也太差劲了慢先从内部排查到外部1. 检测代码执行时间
    2. 检测请求耗时