php脚本在apache中超时需同步配置php自身、运行模式及通信机制:mod_php调php.ini和.htaccess;php-fpm需同步改php.ini与www.conf,且request_terminate_timeout≥max_execution_time;proxytimeout等apache通信超时参数不可遗漏。

先确认你用的是哪种PHP运行模式
这直接决定该改哪几处配置:
-
mod_php(Apache模块模式):PHP直接嵌入Apache进程,此时主要看
php.ini和.htaccess,set_time_limit()有效 -
php-fpm + proxy_fcgi(当前主流):PHP由独立FPM进程池管理,Apache只负责转发请求。这时必须同步改
php.ini和www.conf,set_time_limit()在FPM下默认被禁用
PHP层必须调的两个核心参数
无论哪种模式,这两个值都要对齐:
-
max_execution_time:PHP脚本最大运行秒数(如设为300表示5分钟),在php.ini中修改,改完需重启php-fpm或Apache -
max_input_time:接收POST/上传数据的最长时间,大文件导入时容易触发,建议同步调高(如120)
Apache与PHP之间那层“连接超时”不能漏
即使PHP没超时,Apache也可能提前掐断连接:
- 若用
mod_fcgid:加配置FcgidIOTimeout 300和FcgidConnectTimeout 30,单位是秒 - 若用
proxy_fcgi(php-fpm常用):在虚拟主机或主配置中加ProxyTimeout 300 - 别动
Timeout指令去“配合PHP”,它管的是网络传输,不是脚本执行;设太高反而积压worker
PHP-FPM环境额外关键项
仅改php.ini远远不够,FPM自己会杀进程:
- 编辑
/etc/php-fpm.d/www.conf,确保:request_terminate_timeout = 300s(硬性终止,必须 ≥max_execution_time)request_slowlog_timeout = 60s(可选,用于记录慢请求) - 如果
request_terminate_timeout比max_execution_time小,PHP脚本会在到达PHP限制前就被FPM强杀,错误日志里会出现child xxx exited on signal 15
验证是否真生效
别只信phpinfo()页面——它只显示PHP层配置,不反映FPM或Apache的拦截行为:
- 写个测试脚本:
<?php set_time_limit(0); sleep(240); echo "done"; ?> - 用
curl -v http://yoursite/test.php实测,看是返回内容、504、还是直接断连 - 同时查Apache错误日志和
php-fpm.log,对照错误码定位具体哪一层超时(408?504?mod_fcgid timeout?)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











