黄良懿的博客
总有一些美好,期待着我们去发现
-
php里为file_get_contents等的http请求设置默认超时时间
发表于 2011年11月22日 没有评论由于file_get_contents($url)的抓取方式是如此的简单易上手,并通常表现良好,在php世界里受到了相当的好评,并被大量的……滥用。
最常见的问题是,你要取的内容在一台不稳定的服务器上,或者是网络不稳定时,这个函数的响应时间从常规的100ms级跃升至秒级。悲催的是,这种情况可是能轻易的毁掉一个中型网站的。而且,除了连接数耗尽的可能外,还可能会导致CPU 100%占用,张宴的《PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系》里提到过这个问题。
设置$context参数确实是一个比较恶心的事,特别是维护一个到处都有这个破调用的系统时。好在,我们还是有简单的解决办法的,那就是通过PHP 5.1.0新引入的函数stream_context_get_default来设置stream_context的缺省值。这样的话只要在公共的include文件中放置以下代码就能解决问题了:
define('HTTP_STREAM_TIMEOUT', 2); $old_context_opts = stream_context_get_default(); stream_context_set_option($old_context_opts, 'http', 'timeout', HTTP_STREAM_TIMEOUT); stream_context_get_default($old_context_opts);其中HTTP_STREAM_TIMEOUT是超时的秒数,之所以没有用毫秒是因为stream_context本来就不能设置到这个级别的超时时间。
另外,从PHP 5.3.0开始,stream_context_set_default可以直接做到以上效果,不再需要别扭的用get函数来设置缺省值了。同时,以上方法也适用于设置proxy等其他属性。
相关日志:



最近评论