php脚本超时需同步调整max_execution_time、nginx的fastcgi_read_timeout及cli/web不同php.ini配置,并排查框架或组件独立设置的超时限制。

PHP 脚本超时是 max_execution_time 控制的,但宝塔里改它不等于立刻生效
直接在宝塔面板 PHP 设置页调大 max_execution_time 值,只改了 php.ini 里的主配置。如果脚本里用了 set_time_limit(),或者通过 ini_set('max_execution_time', ...) 动态覆盖,那页面级设置就失效了。更常见的是:你改了,重启了 PHP,但脚本还是 30 秒就断——大概率是被 Nginx 的 fastcgi_read_timeout 截断了,不是 PHP 自己超时。
必须同步调整 Nginx 的 fastcgi_read_timeout
宝塔用 Nginx + PHP-FPM 架构,PHP 处理慢,Nginx 等不到响应就会主动断开连接,报错通常是 504 Gateway Time-out 或日志里出现 upstream timed out。这个超时和 PHP 的 max_execution_time 完全无关,得单独配。
- 进宝塔 → 网站 → 对应站点 → 配置文件
- 在
location ~ \.php$块内,找到fastcgi_read_timeout这一行(没有就手动加) - 设成比 PHP
max_execution_time大 5–10 秒,比如 PHP 设 300,这里设fastcgi_read_timeout 310; - 保存后点「重载配置」,不要只重启 PHP
CLI 和 Web 环境的 max_execution_time 是两套配置
你在宝塔 PHP 设置页改的,只影响 Web 请求(即通过 Nginx/FastCGI 运行的 PHP)。如果你用宝塔终端跑 php /path/to/script.php,走的是 CLI SAPI,读的是另一份 php.ini(路径通常是 /www/server/php/{版本}/bin/php.ini),里面 max_execution_time 默认是 0(不限时)。所以 Web 脚本超时了,CLI 下却能跑完——不是代码问题,是环境没对齐。
- 查 Web 环境用的 ini:新建一个
info.php,内容<?php phpinfo(); ?>,看「Loaded Configuration File」 - 查 CLI 环境用的 ini:终端执行
/www/server/php/80/bin/php --ini(把 80 换成你实际版本) - 两个地方的
max_execution_time得各自确认,别只改一个
某些框架或 CMS 会自己干预超时逻辑
比如 WordPress 在后台执行更新时,会用 wp_remote_post 发起请求,默认 timeout 是 5 秒;Laravel 的 Http::timeout(30) 也只管 HTTP 客户端超时,和脚本总执行时间无关。这些不是 PHP 层面的限制,改 max_execution_time 压根没用。
- 遇到「明明 PHP 设了 600,但 5 秒就停」,先看是不是框架封装的 HTTP 请求、队列任务、数据库查询设置了独立 timeout
- 检查错误日志里有没有
cURL error 28(cURL 超时)或PDOException带SQLSTATE[HY000]: General error: 2013(MySQL 连接超时) - 这类超时得去对应组件文档里调,不是改 php.ini 就能解决的
max_execution_time 只是拼图的一块。真正卡住人的,往往是 Nginx 层的 timeout、CLI/Web ini 文件错位、或者框架自己埋的 timeout 开关——它们不报错,只静默中断,查起来最费时间。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











