您现在的位置是:首页 > 学无止境 > 其他网站首页其他 PHP函数file_get_contents超时设置

PHP函数file_get_contents超时设置

  • 莫愁
  • 其他
  • 2019-05-29
简介file_get_contents函数如果不设置超时设置,就会造成服务器挂掉的情况,那么如何解决这个问题呢?下面我就总结下方法。
字数 1057.5

PHP函数file_get_contents超时设置

file_get_contents函数如果不设置超时设置,就会造成服务器挂掉的情况,现在觉得很有必要总结下。

问题分析如下:

我们代码是“file_get_contents("http://www.xxxx.com/") “获取一个 URL 的返回内容,如果该URL响应速度慢,或者出现问题,我们服务器的PHP程序将会一直执行并尝试去获得这个URL的信息,我们知道,在 php.ini 中,有一个参数 max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的以下参数: <value name="request_terminate_timeout">0s</value>  默认值为 0 秒,也就是说,PHP 脚本会一直执行下去,当请求越来越多的情况下会导致php-cgi 进程都卡在 file_get_contents() 函数,导致服务器无法再处理新的 PHP 请求了,所以Apache将给用户返回“502 Bad Gateway”。当CPU的利用率长时间达到100% ,服务器就会挂掉。

问题的解决:

一、请求中的timeout设置。

set_time_limit设置的是PHP程序的超时时间,而要设置file_get_contents函数读取URL的超时时间,可以用resource $context的timeout参数,代码如下:

上面代码中的timeout就是file_get_contents读取url的超时时间,单位是秒。

二、stream_context_create方法

stream_context_create创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。这样看起来功能就强大了,不仅仅可以设置超时时间,还可以设置代理服务器,请求方式和头信息,下面我们就测试下吧:

reponse.php页面代码:

效果:

array (size=2)
  'blogname' => string '莫愁个人博客' (length=18)
  'siteurl' => string 'https://www.mochoublog.com' (length=26)
D:\PHP\wamp64\www\PHP\reponse.php:3:
array (size=1)
  'sitecookie' => string 'MOCHOU' (length=6)

说明file_get_contents可以POST数据和COOKIE数据到目标url,并获得内容。


转载: 感谢您对莫愁个人博客网站平台的认可,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源莫愁个人博客 https://www.mochoublog.com/study/237.html”。

文章评论

    • 评论
    人参与,条评论

技术在线

服务时间

周一至周日 12:00-22:00

关闭下雪
关闭背景特效