phpenv中mysql配置文件默认路径为phpenv\mysql\my.ini,必须在[mysqld]段下设置max_allowed_packet=128m并重启mysql服务,同时需同步配置php.ini中mysqlnd.max_allowed_packet参数并重启apache,最后通过sql查询和php函数验证生效。

phpEnv 是 Windows 下集成 Apache + PHP + MySQL 的便携式环境,它的 MySQL 配置文件默认在 phpenv\mysql\my.ini(不是 my.cnf),改错位置或漏掉客户端配置是绝大多数人失败的直接原因。
确认 phpEnv 中 MySQL 的真实配置路径
phpEnv 的 MySQL 实例不读系统级 /etc/my.cnf,也不读用户目录下的配置。它只认自己安装目录下的 my.ini —— 通常位于:
phpenv\mysql\my.ini
如果你改了别的地方(比如桌面新建的 my.cnf 或 C 盘根目录的配置文件),MySQL 启动时根本不会加载。
验证方法:启动 phpEnv 的 MySQL 服务后,执行:
mysql -u root -p -e "SHOW VARIABLES LIKE 'config_file';"
输出的 Value 字段就是它实际加载的配置文件路径。
在 my.ini 中正确设置 max_allowed_packet
打开 phpenv\mysql\my.ini,找到 [mysqld] 段落(不是 [client] 或 [mysql]),在其下方添加一行:
max_allowed_packet = 128M
注意三点:
- 必须加在
[mysqld]下,加在其他段落(如[client])只影响客户端工具,不影响服务端接收能力 - 单位支持
K/M/G,写134217728(字节)也行,但易错,推荐用128M - 不要写成
max_allowed_packet = 128 * 1024 * 1024—— ini 文件不支持表达式,会直接忽略该行
保存后,**必须重启 phpEnv 的 MySQL 服务**(不是重启电脑,也不是只刷新页面),否则修改不生效。
PHP 连接 MySQL 时也要同步设 max_allowed_packet
phpEnv 自带的 PHP 默认使用 mysqlnd 驱动,但它不会自动继承 MySQL 服务端的 max_allowed_packet 值。当 PHP 执行含大字段的 INSERT 或 SELECT 时,如果结果集单行超过驱动默认限制(通常是 32MB),仍会报 MySQL server has gone away。
解决方式有两种:
- 在 PHP 代码连接数据库时显式传参(推荐):
$pdo = new PDO($dsn, $user, $pass, [PDO::MYSQL_ATTR_MAX_BUFFER_SIZE => 134217728]); - 或修改
phpenv\php\php.ini,添加:mysqlnd.max_allowed_packet=134217728
(注意这是mysqlnd驱动专用参数,mysqli和pdo_mysql共享该设置)
改完 php.ini 后需重启 Apache(phpEnv 界面点「Restart Apache」),否则 PHP 不会重载配置。
验证是否真正生效
光看配置文件写了没用,得进 MySQL 查实际值:
启动 phpEnv 的 MySQL CLI(或用 phpMyAdmin 的 SQL 标签页),执行:
SELECT @@global.max_allowed_packet, @@session.max_allowed_packet;
两个值都应显示 134217728(即 128MB)。如果只有 @@global 变了,@@session 还是旧值,说明你没重启 MySQL 服务;如果两个都是旧值,大概率是 my.ini 路径错了或段落写错了。
另外,别忽略 PHP 侧:在 PHP 脚本里加一行 var_dump(ini_get('mysqlnd.max_allowed_packet'));,确认它返回的是你设的字节数。
最常被跳过的一步:改完服务端和 PHP 配置后,忘了让已建立的连接断开重连——PDO/MySQLi 连接池里的长连接仍按旧限制跑,错误会继续出现,直到连接被回收或手动 close/reconnect。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











