必须先通过phpinfo()确认实际加载的php.ini路径,再同步调大upload_max_filesize、post_max_size(≥前者+5M~10M)、memory_limit(>post_max_size)、max_execution_time和max_input_time,并确保file_uploads=On、单位M大写、无BOM保存,最后按phpEnv特性重启对应服务。

phpEnv里改upload_max_filesize必须先确认PHP版本和配置路径
phpEnv 是 Windows 下的多版本 PHP 环境管理工具,它不会自动把修改写进全局生效的 php.ini —— 你改错位置,重启服务也没用。关键要找到当前站点实际加载的那个 php.ini,而不是 phpEnv 安装目录下“看起来像”的那个。
打开你的 PHP 项目根目录,新建一个 info.php,内容只有一行:
<?php phpinfo(); ?>访问后搜索
Loaded Configuration File,看到的路径才是真实起作用的文件。常见位置有:C:\phpenv\versions\8.2\etc\php.ini 或 C:\phpenv\versions\8.2\lib\php.ini,具体取决于你用的是哪个 PHP SAPI(CGI 还是 Apache 模块)。
改完upload_max_filesize但上传还是失败?检查这三项是否同步调大
只改 upload_max_filesize 是最典型的错误。PHP 上传流程卡在任意一环都会静默失败(比如 $_FILES 为空、返回空响应或 ERR_CONNECTION_RESET)。
-
post_max_size必须 ≥upload_max_filesize,建议设为后者 + 5M~10M 缓冲(例如upload_max_filesize = 64M→post_max_size = 72M) -
memory_limit必须 >post_max_size,否则 PHP 解析 POST 数据时直接内存溢出;设成128M或256M更稳妥 -
max_execution_time和max_input_time都得拉长,尤其是慢网环境上传大文件,设成300(5 分钟)起步
phpEnv 的 Apache/Nginx 服务重启方式和普通环境不同
phpEnv 自带的控制面板或命令行工具不一定会触发 PHP 配置重载。你改完 php.ini 后,必须手动操作:
立即学习“PHP免费学习笔记(深入)”;
- 如果用的是 phpEnv 内置 Apache:关闭“Apache Service”再重新启动,不能只点“Restart”
- 如果用的是 phpEnv + 外部 Nginx(如通过
nginx.conf反代):除了重启 Nginx,还必须重启对应版本的php-cgi.exe或php-fpm进程(任务管理器里杀掉再重开) - 改完后别信浏览器缓存,用
curl -I http://localhost/info.php或新开无痕窗口验证
Windows 下 phpEnv 常见坑:权限、单位大小写、BOM 头
Windows 环境下编辑 php.ini 极易踩隐形坑:
- 用记事本保存会加 UTF-8 BOM 头,导致 PHP 解析失败——务必用 VS Code、Notepad++ 或 Sublime Text,并选“UTF-8 无 BOM”编码保存
-
upload_max_filesize = 64M中的M必须大写,m或MB无效 - 如果 phpEnv 安装在
C:\Program Files\下,用管理员权限启动编辑器再改php.ini,否则可能保存失败且无提示 - 某些 phpEnv 版本默认启用
file_uploads = Off,顺手检查这一行是否为On
php.ini 是独立的,且 Apache/Nginx 的模块加载路径可能指向旧版本。上传失败时,第一反应不该是“是不是没改对”,而是“我这次请求到底走的是哪个 PHP 版本、加载了哪份配置”。



















