根本原因是$cfg['ExecTimeLimit'](默认30秒)优先级最高,需在config.inc.php中设为0;同时MySQL的max_allowed_packet不足会导致假性超时,须同步调大并重启MySQL;命令行导入可彻底绕过所有Web层限制。
$cfg['exectimelimit'] 是根本原因,不是 max_execution_time。
即使你把 php.ini 里的 max_execution_time 改成 1200,phpMyAdmin 仍会在约 30 秒后报 “Script timeout passed”。因为它在导入/执行流程中每处理一段 SQL 就主动检查自己的配置项 $cfg['ExecTimeLimit'],默认值就是 30(秒),完全绕过 PHP 的全局超时机制。
XAMPPphpMyAdminconfig.inc.php(注意不是 config.default.php)$cfg['ExecTimeLimit'] = 0;(设为 0 表示禁用限制)$cfg['blowfish_secret'] 后面即可,无需重启 Apachemax_allowed_packet 不够会“假性超时”当你执行一条巨长的 INSERT 或含大字段的 CREATE TABLE 语句时,MySQL 服务端先尝试把整条语句载入内存缓冲区。若超过 max_allowed_packet,服务端直接拒绝接收——phpMyAdmin 页面会卡住、变空白,或报错但不提示具体原因,看起来就像“超时”。
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_allowed_packet';"
SET GLOBAL max_allowed_packet = 268435456;(即 256MB)XAMPPmysqlbinmy.ini(Windows)或 /Applications/XAMPP/xamppfiles/etc/my.cnf(macOS),在 [mysqld] 下添加:max_allowed_packet = 256M
只要你的 SQL 文件不含深度嵌套的 DELIMITER 或交互式语句(如 source),命令行方式就跳过 PHP 解析、HTTP 请求、Web 渲染三层瓶颈,也不受 $cfg['ExecTimeLimit']、max_execution_time、post_max_size 任何一项影响。
XAMPPmysqlbin 目录mysql -u root -p --default-character-set=utf8mb4 your_db_name
source C:/path/to/your/file.sql(路径用正斜杠或双反斜杠)真正容易被忽略的是:phpMyAdmin 的 $cfg['ExecTimeLimit'] 和 MySQL 的 max_allowed_packet 是两个独立又常同时触发的卡点,只调一个往往没用;而命令行导入虽然简单,但很多人卡在路径写法或字符集参数缺失上,导致中文乱码或语句解析失败。
立即学习“PHP免费学习笔记(深入)”;