php脚本超时主因是max_execution_time触发终止,宝塔默认30秒不足;需在站点设置中修改“最大脚本运行时间”,并同步调整nginx的fastcgi_read_timeout和php-fpm的request_terminate_timeout,三者需一致且防跨站攻击功能可能强制限制为300秒。

PHP 脚本执行超时的典型表现
页面卡住、返回 502 Bad Gateway、Nginx 日志里出现 upstream timed out、PHP 错误日志中没有报错但请求中断——这些基本都是 max_execution_time 触发了强制终止。宝塔默认设为 30 秒,对含大量数据库查询、文件处理或远程 API 调用的脚本来说,远远不够。
在宝塔面板里改 max_execution_time 的正确位置
别只改 php.ini 文件就以为完事。宝塔下 PHP 配置分三层,优先级从高到低:站点配置 > PHP 项目配置(如 Laravel 的 .user.ini)> 全局 php.ini。多数超时问题出在站点层被覆盖。
- 进宝塔 → 网站 → 找到对应站点 → “设置” → “PHP 版本” → 点右侧“设置”按钮(不是“配置文件”)→ 找到“最大脚本运行时间”,填入你需要的秒数(比如
300)→ 保存 - 该操作会自动写入站点专属的
.user.ini,比全局php.ini优先级更高,且重启 PHP 不会丢失 - 如果用了 ThinkPHP 或 CodeIgniter 等框架,确认没在入口文件或配置里用
set_time_limit(0)或ini_set('max_execution_time', '30')这类硬编码覆盖
为什么改了 max_execution_time 还是超时?
PHP 层面只是其中一环。Nginx 和 PHP-FPM 同样有超时控制,三者不一致就会“表面改了却无效”。
- Nginx 的
fastcgi_read_timeout必须 ≥ PHP 的max_execution_time,建议设为300或更高,在站点配置 → “配置文件”里搜这一项并修改 - PHP-FPM 的
request_terminate_timeout(在/www/server/php/{版本}/etc/php-fpm.d/www.conf中)也得同步调大,否则 FPM 进程自己先杀掉请求;设为300s或注释掉该行(表示不限制) - 若启用了宝塔的“防跨站攻击”,它会强制限制
max_execution_time为 300 秒且不可调高,此时需关闭该功能或联系运维评估风险
线上环境慎用 set_time_limit(0)
在代码里写 set_time_limit(0) 看似一劳永逸,但极易引发资源堆积:一个卡死的脚本会一直占着 PHP-FPM worker,积压后整个站点变慢甚至 503。生产环境更推荐精准预估耗时,按接口分级设值(比如导出接口设 600,登录接口保持 30),而不是全局放开。
真正难调的不是参数数字,而是超时背后那个没加索引的 SQL、没设 timeout 的 cURL、或循环里反复 fopen 没 fclose 的文件句柄——max_execution_time 只是兜底,不是替代性能优化的捷径。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











