超时需同步调整php的max_execution_time和phpmyadmin的$cfg['exectimelimit'],二者缺一不可;前者控制php脚本执行时限,后者是phpmyadmin内部轮询计时开关,默认300秒,不依赖php设置。
直接改 max_execution_time 和 $cfg['exectimelimit'] 两个地方,缺一不可;只改其中一个,大概率还是超时。
为什么改了 php.ini 还是超时?
因为 phpMyAdmin 自己有一层执行时间控制,它不信任 PHP 的全局设置。即使你把 max_execution_time 设成 0,$cfg['ExecTimeLimit'] 默认仍是 300 秒(5 分钟),到点就中断导入流程,页面卡在“正在导入…”或报错 “Maximum execution time of 300 seconds exceeded”。
-
$cfg['ExecTimeLimit']是 phpMyAdmin 内部用来判断“该不该继续等 PHP 返回”的开关,不是装饰用的 - 它生效位置优先级:如果存在
config.inc.php,就用里面的值;否则 fallback 到libraries/config.default.php - 别去改
config.sample.inc.php—— 它只是模板,不参与运行
在哪改 $cfg['ExecTimeLimit']?
必须改实际加载的 config.inc.php,路径取决于你的部署方式:
- 宝塔面板:站点根目录 →
/public/phpmyadmin/config.inc.php(若不存在,复制config.sample.inc.php并重命名) - XAMPP/WAMP:通常在
phpMyAdmin/目录下,直接找config.inc.php - Docker 或自建 Nginx+PHP-FPM:进容器或服务器查 phpMyAdmin 安装路径,确认
config.inc.php是否被挂载或覆盖
加这一行即可(设为 0 表示不限制):
$cfg['ExecTimeLimit'] = 0;
为什么改完还是 504 Gateway Timeout?
那是 Web 服务器(Nginx/Apache)在等 PHP 响应时自己放弃了,和 PHP 执行时间无关。常见于 Nginx:
- 检查
location ~ \.php$块里有没有fastcgi_read_timeout,默认常是 60 或 300 秒 - 它必须 ≥ PHP 的
max_execution_time(比如 PHP 设了 600,这里至少设 620) - Apache 用户注意
Timeout指令(主配置或虚拟主机内),不是KeepAliveTimeout - 如果用了 Cloudflare,免费版硬性限制 100 秒,改啥都没用——得直连或升级
上传大文件失败(空白页 / 413 错误)跟执行时间完全无关
这是 Web 服务器拦住了 HTTP 请求体,典型错误是:413 Request Entity Too Large。解决方法:
- Nginx:设
client_max_body_size 512M(放在http、server或location块均可) - Apache:设
LimitRequestBody 536870912(单位字节) - 同时确认 PHP 的
post_max_size和upload_max_filesize已同步调大
真正稳定导入 300MB+ SQL 文件的方式,永远是跳过 phpMyAdmin,用 mysql -u root -p database_name 或 <code>zcat file.sql.gz | mysql —— 不走 HTTP,没超时,不占内存,失败也不用重传整个文件。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











