很多站长朋友们都不太清楚php设置超时无效,今天小编就来给大家整理php设置超时无效,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 PHP file_get_contents 函数超时的几种解决方法 2、 几种常见的PHP超时处理方法 3、 php进程超时接口返回504错误分析 4、 php执行超时怎么办?在IIS上,文件里设置了set_time_limit(0); 还是会超时。 5、 centos下 php 超时设置不生效 PHP file_get_contents 函数超时的几种解决方法这里就简单介绍两种:
一、增加超时的时间限制
这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。
我一开始以为set_time_limit也能影响到file_get_contents,后来经测试,是无效的。真正的修改file_get_contents延时可以用resource
$context的timeout参数:
复制代码
代码如下:
$opts
=
array(
‘http'=>array(
‘method'=>”GET”,
‘timeout'=>60,
)
);
$context
=
stream_context_create($opts);
$html
=file_get_contents('',
false,
$context);
fpassthru($fp);
二、一次有延时的话那就多试几次
有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃,因为file_get_contents()如果失败将返回
FALSE,所以可以下面这样编写代码:
复制代码
代码如下:
$cnt=0;
while($cnt
<
3
($str=@file_get_contents('http…'))===FALSE)
$cnt++;
几种常见的PHP超时处理方法一、在php.ini里面设置 max_execution_time = 1800;
二、通过PHP的ini_set 函数设置 ini_set("max_execution_time", "1800");
三、通过set_time_limit 函数设置 set_time_limit(1800) ;
php进程超时接口返回504错误分析在一次接口测试中,发现返回的http 504 time out 的错误,然后查看了php-fpm的错误日志,发现了如下错误
从表现上看,是php进程超时导致的进程被kill了,那么这个超时时间以及kill的机制是跟哪些参数有关呢,这里系统这里一下。
Nginx服务一般因为php的错误或者超时会有两种错误码502 bad Gateway 或者 504 Gateway Time-out
一种情况是php产生了语法错误,比如循环调用、变量作用域错误、方法不存在等,如果开启错误日志输出的话,这种错误在php-fpm的错误日志中是可以看到调用栈信息的。
另外一种情况可能就是超时引起的php-fpm主动kill的情况,在php.ini和php.fpm中有两个配置项,用来管理php脚本的最大执行时间
当php脚本的执行时间超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。
以顶部的错误为例,当报502错误是,nginx的errorlog中有如下日志,:
所以只需将这两项的值调大一些就可以让PHP脚本不会因为执行时间长而被终止了。request_terminate_timeout可以覆盖max_execution_time,
所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。
此外要注意的是Nginx的upstream模块中的max_fail和fail_timeout两项。这两个配置表示在fail_timeout事件内,如果fail的测试达到max_fail,那么在接下来的fail_timeout时间内,Nginx都会认为上游服务器挂掉了,都会返回502错误。
所以可以将max_fail调大一些,将fail_timeout调小一些。
PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?
因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置
以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:
调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。
而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。
要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。
参考链接: 感谢分享!
php执行超时怎么办?在IIS上,文件里设置了set_time_limit(0); 还是会超时。执行权限是设为纯脚本的没错!
问题是系统权限的设定。估计你的是2003的系统吧?XP我配过N次,也没出来这种问题。
参看我写的文章
希望能帮你解决问题
centos下 php 超时设置不生效首先可以明确的是:
代码没有错
不对,应该说是代码有错
能正常报错
但为什么不报错呢
有可能你php.ini中display_errors=Off了,改成On试试。
关于php设置超时无效的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php设置超时无效 php时间设置的详细内容...