修改max_execution_time需同步调整php.ini、Nginx的fastcgi_read_timeout及PHP-FPM的request_terminate_timeout三处配置,并重启服务,否则无效。

改 max_execution_time 不是“装完 PHP 就能直接调”的事,它受多个配置层级控制,改错地方根本不起作用。
php.ini 里改 max_execution_time 才算数
这是唯一全局生效的位置。其他方式(比如 ini_set())可能被禁用,或只在当前脚本生效,且不能超过 php.ini 里设的上限。
- 先用
php --ini(命令行)或phpinfo();(Web 环境)确认你改的是**正在加载的那个php.ini**,别改错文件 - 找到这一行:
max_execution_time = 30
,改成你需要的秒数,比如max_execution_time = 300
- 改完必须重启 Web 服务器(
nginx或apache)或 PHP-FPM 进程,否则不生效 - 值设为
0表示不限制(不推荐生产环境用)
Web 服务器配置可能覆盖 PHP 设置
特别是用 Nginx + PHP-FPM 时,fastcgi_read_timeout 和 request_terminate_timeout 会硬性中断请求,比 max_execution_time 更早起效。
- Nginx 配置中检查是否有:
fastcgi_read_timeout 300;
,这个值必须 ≥ 你设的max_execution_time - PHP-FPM 的
www.conf里检查:request_terminate_timeout = 300s
(注意单位带s),也要 ≥max_execution_time - Apache 下如果用了
mod_php,主要看php.ini;如果用了php-fpm,同样要同步检查 FPM 配置
set_time_limit() 和 ini_set() 的实际限制
这两个函数只能在脚本运行中临时调整,但有硬性前提:它们无法突破 php.ini 中设定的上限,且前提是 safe_mode 关闭(PHP 5.4+ 已移除)、disable_functions 没禁用它们。
立即学习“PHP免费学习笔记(深入)”;
-
set_time_limit(300)是从**调用时刻起**再续 300 秒,不是总时长重置 -
ini_set('max_execution_time', '300')效果等同于set_time_limit(),且仅对当前请求有效 - 如果
php.ini里设了max_execution_time = 30,而你在脚本里set_time_limit(600),最终仍会在 30 秒后被杀——因为 PHP 启动时已锁定最大允许值
CLI 模式下改 max_execution_time 要单独处理
命令行执行 PHP 脚本(比如 php script.php)默认读取的是另一个 php.ini 文件(路径常为 /etc/php/*/cli/php.ini),和 Web 用的不是同一个。
- 运行
php --ini看 CLI 加载的是哪个php.ini - 修改对应文件里的
max_execution_time,或者直接在命令中覆盖:php -d max_execution_time=300 script.php
- 注意:CLI 模式下
set_time_limit(0)通常更安全,因为没超时风险
最常被忽略的是:你以为改了 php.ini 就完事,结果 Nginx 或 PHP-FPM 的超时配置比它还短,请求照样 30 秒断掉。三个地方(php.ini、Nginx fastcgi_read_timeout、PHP-FPM request_terminate_timeout)必须同时检查、协同调整。











