file_get_contents 比 浏览器慢 ? 抓取纯文本页面内容,用file_get_contents费时大约1秒左右,chrome下直接打开测试发现才用来300ms。1. 这是为何?2. 要用curl?网络稳定,页面内容很少,仅文本。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 获取网络上的数据用curl好些,特别是在多次获取的时候,比file_get_contents快chrome 那个就不知道了 因为ping过发现时间大约在100ms,加上页面就少量文字,觉得1秒花的不值。会考虑试试curl 用curl试试。 你是如何计时的?方便的话可以把URL发出来让大家测试下。 microtime(true); 前后各一次相减.curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。 你说的没有错误,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); 还要继续测,好像一些jsondecode的工作影响也不少。我再确认一下 你说的没有错误,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);有加的 microtime(true); 前后各一次相减.curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。建议用curl吧,我已经把我的所有代码,用到file_get_contents获取网页内容的地方全部换成curl了。你可以自己封装一个更灵活的curl库,根据使用场景封装出用起来也一样方便的方法,毕竟curl强大得多呀。 你说的没有错误,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); microtime(true); 前后各一次相减.curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。建议用curl吧,我已经把我的所有代码,用到file_get_contents获取网页内容的地方全部换成curl了。你可以自己封装一个更灵活的curl库,根据使用场景封装出用起来也一样方便的方法,毕竟curl强大得多呀。恩,好的,谢谢你的建议。还不太熟悉,我两个都试试。 你说的没有错误,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 你本来是 file_get_contents 和 浏览器 比现在是 file_get_contents 和 curl 比你到底是想谁和谁比?其实攀比是没有必要的,网络上千变万化、服务器也有个响应时间问题具体问题要具体对待,用 curl 取不到的,用 file_get_contents 反而能取到。这种情况经常发生 浏览器咯,走题了。curl和file_get_contents相差不大,前者稍快,一起讨论呗。你说的这种情况有案例么?curl、file_get_contents这些我纯粹好奇,有详细的测试再贴上来 http://lvvbbe.com/questions/8148013/is-file-get-contents-slower-than-browser dns缓存? file_get_contents 慢到1秒 可能是网络问题 ,不然这函数也太差劲了慢先从内部排查到外部1. 检测代码执行时间2. 检测请求耗时 php数组找数问题? mysql 请教,小偷表单问题 insert 时得到id的问题,在线等 配置PHP5+APACHE2.2,竟然打不开php页面,而是下载,这是为什么? discuzX2.5帖子列表页显示帖子所属板块? 这句话是什么意思 初接触php,有个非常小的 print 问题请教!关于正确书写! 同时查询几个表中的内容,怎么样才能把那些内容分页显示出来呢????急用。 遇上下面问题该怎么解决?是APACHE+PHP的安装问题. 微信开发模式群发消息接收的是乱码 php调用java的webservice的一个问题
chrome 那个就不知道了
会考虑试试curl
前后各一次相减.
curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。
你说的没有错误,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);
你说的没有错误,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);
有加的
前后各一次相减.
curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。建议用curl吧,我已经把我的所有代码,用到file_get_contents获取网页内容的地方全部换成curl了。你可以自己封装一个更灵活的curl库,根据使用场景封装出用起来也一样方便的方法,毕竟curl强大得多呀。
你说的没有错误,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);
前后各一次相减.
curl每次大约300ms,确实会快一点,http头都应该是相同的应该不是网络原因,因为就现在我用2段不同的脚本同时去测还是curl快。建议用curl吧,我已经把我的所有代码,用到file_get_contents获取网页内容的地方全部换成curl了。你可以自己封装一个更灵活的curl库,根据使用场景封装出用起来也一样方便的方法,毕竟curl强大得多呀。
恩,好的,谢谢你的建议。还不太熟悉,我两个都试试。
你说的没有错误,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
现在是 file_get_contents 和 curl 比
你到底是想谁和谁比?其实攀比是没有必要的,网络上千变万化、服务器也有个响应时间问题具体问题要具体对待,用 curl 取不到的,用 file_get_contents 反而能取到。这种情况经常发生
你说的这种情况有案例么?
curl、file_get_contents这些我纯粹好奇,有详细的测试再贴上来
2. 检测请求耗时