PHP脚本运行180秒后抛出404错误的原因排查求助
解决PHP长脚本运行3分钟后出现404无响应的问题
我来帮你梳理下可能的原因和对应的解决办法,你遇到的情况虽然调大了PHP的执行时间,但还有不少其他环节会影响长脚本的运行:
1. 检查Web服务器的超时设置
PHP的max_execution_time只是控制脚本本身的运行时间,但Web服务器(比如Apache或Nginx)也有自己的连接超时限制,一旦超过这个时间,服务器会主动断开连接,可能返回404或其他错误:
- Apache:找到配置文件里的
Timeout指令,默认可能是300秒(5分钟),如果你的脚本要跑更久,把它改成6000(和PHP的设置对应),然后重启Apache。 - Nginx:如果用FastCGI运行PHP,需要调整
fastcgi_read_timeout;如果是反向代理,调整proxy_read_timeout,把值设为6000s,重启Nginx生效。
2. 解决echo无法即时显示的问题
默认PHP会开启输出缓冲,只有缓冲区满或者脚本结束才会把内容发送给浏览器,这会让你误以为脚本没在运行。你可以在脚本开头添加:
ob_implicit_flush(true); // 自动刷新输出缓冲区 ini_set('output_buffering', 0); // 关闭输出缓冲
之后每次echo内容后,也可以配合flush(); ob_flush();来确保内容即时发送到浏览器,这样就能实时看到脚本的运行状态了。
3. 排查反向代理/CDN的超时限制
如果你的网站使用了Cloudflare、阿里云CDN这类服务,或者有反向代理服务器,它们通常也有自己的超时阈值(比如Cloudflare默认是100秒),超过后会直接返回错误。你需要登录对应的服务控制台,找到超时设置并调整到足够大的值(比如6000秒)。
4. 用命令行工具排除浏览器因素
浏览器本身可能也有隐性的超时机制,你可以用curl命令行来测试脚本,看是否能正常完成:
curl -v http://your-domain.com/your-script.php
观察命令行的输出,如果脚本能正常运行到结束,说明问题出在浏览器或前端环节;如果还是出现中断,那问题大概率在服务器或PHP配置上。
5. 开启PHP错误日志排查隐性错误
虽然你看到脚本在更新文件,但可能在某个环节出现了未被捕获的致命错误,导致脚本异常终止,服务器返回404。你可以开启PHP的错误日志来排查:
在php.ini中设置:
log_errors = On error_log = /var/log/php-errors.log display_errors = Off
然后运行脚本,查看日志文件,看是否有错误信息提示脚本终止的原因。
内容的提问来源于stack exchange,提问作者Graham
相关产品推荐
相关产品推荐

