集成环境:
PhpStudy 8.0 Win64, Apache 2.4.39
测试代码:
<?php
set_time_limit(0);
$i = 0;
while($i < 60)
{
sleep(1);
$i ++;
}
echo $i;
运行结果:
尽管在PHP代码里设置不限超时(set_time_limit(0)),但执行页面时依然在40s后出现无法加载页面的错误。
之前一直困扰了很久,在PhpStudy上调各种配置都无法解决,后来发现这个错误提示并不是PHP脚本的提示,是Apache服务的出错提示,终于通过网上查找资料找到解决办法。
在Apache的配置文件(httpd.conf)末尾加上以下配置(以下为开发环境特殊配置,按具体场景调整)
<IfModule mod_fcgid.c>
# php-cgi进程的生存时间
FcgidProcessLifeTime 9999999
# php-cgi进程IO超时时间
FcgidIOTimeout 9999999
# php-cgi进程连接超时时间
FcgidConnectTimeout 9999999
# 上传文件的最大尺寸 100MB
FcgidMaxRequestLen 104857600
# php-cgi最大的进程数
# FcgidMaxProcesses 5
</IfModule>
问题原因:
因为PhpStudy中是使用 fastcgi模块(mod_fcgid)启用多个进程实现多个PHP版本共存的,所以执行PHP代码时,除了PHP本身的超时限制,还会有fcgid进程自带的各种超时限制,需要调整相应的参数。
同样,PhpStudy 的 Nginx 也会存在相似的问题。
fcgid更多的配置参数请查看:https://blog.csdn.net/nyist327/article/details/44243399
参考资料:
phpstudy 做的后台长时间运行的脚本,设置了脚本运行时间还是40秒就返回500,用的apache2.4.39
php脚本运行40秒服务器就返回500 Internal Server Error(解决办法在回复中)
apache 使用 mod_fcgid.so模块时 配置指令