phpEnv下需修改其实际加载的php.ini(如C:\phpEnv\php\php-8.2\php.ini),并同步设置upload_max_filesize=64M、post_max_size=72M、memory_limit=256M,再通过phpenv restart重启服务,最后用phpinfo()验证三者值及Loaded Configuration File路径是否一致。

phpEnv 下改不了 upload_max_filesize?不是配置没生效,是改错了位置。
确认 phpEnv 当前加载的 php.ini 路径
phpEnv 是 Windows 下的 PHP 多版本环境管理工具,它会为每个 PHP 版本维护独立的配置。直接改系统目录下的 php.ini 通常无效。
- 在命令行运行
php --ini,看输出里Loaded Configuration File指向哪 —— 这才是 phpEnv 实际读取的文件 - 常见路径如:
C:\phpEnv\php\php-8.2\php.ini或C:\phpEnv\php\php-8.1\php.ini,取决于你当前启用的版本 - 如果输出显示
none,说明 phpEnv 没有加载任何php.ini,需手动复制一份默认配置过去(比如从php.ini-development复制并重命名为php.ini)
必须同步修改的三个参数值
只改 upload_max_filesize 一定失败。Nginx 或 Apache 不拦,PHP 自己也会在解析 POST 数据时拒绝。
-
upload_max_filesize = 64M:这是你想要的单文件上限 -
post_max_size = 72M:必须大于upload_max_filesize,否则整个 POST 请求被截断,$_FILES为空 -
memory_limit = 256M:至少比post_max_size大,否则 PHP 解析大 POST 时内存不足,报错或静默失败
改完保存,**不需要重启 IIS/Apache/Nginx** —— phpEnv 管理的是 CLI 和 FastCGI 模式下的 PHP-FPM 进程,只需在 phpEnv GUI 中点击对应 PHP 版本的「重启服务」按钮,或命令行执行 phpenv restart(若支持)。
立即学习“PHP免费学习笔记(深入)”;
为什么 ini_set() 在 phpEnv 下也无效
即使你在脚本开头写 ini_set('upload_max_filesize', '64M'),它也不会起作用。
- 因为
upload_max_filesize的变更范围是PHP_INI_PERDIR,仅允许在php.ini、.htaccess(Apache)或 Web 服务器配置中设置 -
ini_set()只能修改PHP_INI_ALL类型的配置项(比如display_errors) - phpEnv 默认搭配 Apache + mod_php 或 Nginx + PHP-FPM,两种模式下
ini_set()都无法绕过这个限制
验证是否真正生效
别信编辑器里的“已保存”,也别靠上传测试反复折腾。最稳的方式是:
- 新建一个
info.php,内容只有<?php phpinfo(); ?> - 用浏览器访问它,搜索
upload_max_filesize,确认显示的值是你刚设的(比如64M) - 同时检查
post_max_size和memory_limit是否也更新了,且三者关系合理 - 注意看页面顶部的
Loaded Configuration File路径,和你修改的是否一致 —— 这是最容易被忽略的点
如果 phpinfo() 显示的仍是旧值,说明你改的不是它正在读的那个 php.ini,或者权限问题导致文件未被重新加载。



















