file_get_contents函数致使CPU使用率100%

作者:enenba | 发表于:2012-06-15 22:58 | 分类:php源码

有时候,运行 Nginx、PHP-CGI(php-fpm) Web服务的 Linux 服务器,突然系统负载上升,使用 top 命令查看,很多 php-cgi 进程 CPU 使用率接近100%。后来,我通过跟踪发现,这类情况的出现,跟 PHP 的 file_get_contents() 函数有着密切的关系。

  大、中型网站中,基于 HTTP 协议的 API 接口调用,是家常便饭。PHP 程序员们喜欢使用简单便捷的 file_get_contents("http://example.com/") 函数,来获取一个 URL 的返回内容,但是,如果 http://example.com/ 这个网站响应缓慢,file_get_contents() 就会一直卡在那儿,不会超时。

 

 以上内容是出自 张宴的博客 http://blog.s135.com/file_get_contents/
这个采集上是很有影响的,我也习惯了使用file_get_contents() ,现在知道了,应该怎么使用了原文也给出的解决方法:

 

要做到彻底解决,只能让 PHP 程序员们改掉直接使用 file_get_contents("http://example.com/") 的习惯,而是稍微修改一下,加个超时时间,用以下方式来实现 HTTP GET 请求。要是觉得麻烦,可以自行将以下代码封装成一个函数。

<?php
$ctx = stream_context_create(array(
   'http' => array(
       'timeout' => 1 //设置一个超时时间,单位为秒
       )
   )
);
file_get_contents("http://example.com/", 0, $ctx);
?>


 

上一篇: php获取某网站的百度快照日期   |   下一篇:JS检查QQ格式正确» 标签: php函数 file_get_contents CPU使用率

评论:

2012-08-09 10:02

这个使用率有点高要

2012-07-13 21:03

收藏留用

2012-07-11 09:50

相互关注,相互学习哈。

2012-06-17 23:29

好几天没来了 ,来看看

2012-06-18 00:07

睡前看一看,立马见山寨!

2012-06-16 15:46

呵呵……路过,支持一下……

2012-06-15 23:30

好东东,嘿嘿.http://www.4328.info/j16183.aspx