phpEnv中修改上传限制需同时配置PHP和Nginx:先编辑实际生效的php.ini(路径见phpinfo),设upload_max_filesize、post_max_size(≥前者且单位用M)、memory_limit(≥post_max_size)、max_execution_time;再修改nginx.conf中client_max_body_size(≥post_max_size),最后分别重启PHP-CGI进程和Nginx。

phpEnv 里改 upload_max_filesize 和 post_max_size 必须直接编辑 php.ini
phpEnv 是 Windows 下的便携式 PHP 环境,它不走服务注册或系统级配置,所有 PHP 行为都由其自带的 php.ini 文件驱动。你点开 phpEnv 控制面板里的「PHP 设置」或「上传限制」滑块,它只是个 UI 假动作——背后不会自动写入任何配置,也不会校验参数关系。真正起作用的只有那个被加载的 php.ini 文件。
先确认当前生效的配置文件路径:新建一个 info.php,内容为 <?php phpinfo(); ?>,用 phpEnv 自带的浏览器访问,搜索 Loaded Configuration File,路径类似 C:\phpenv\php\php-8.1.22\php.ini。改错文件等于白改。
- 必须同时修改
upload_max_filesize和post_max_size,且post_max_size≥upload_max_filesize(建议大 5M) - 别写
100MB或100m——PHP 只认M(大写),m或MB会被当 0 处理 - 改完保存,**不用重启 phpEnv 主程序**,但必须关掉当前正在跑的 PHP-CGI 进程(任务管理器结束
php-cgi.exe),再重新点「启动服务」
为什么改了 php.ini 还是报 413 或空数组?检查 client_max_body_size
phpEnv 默认搭配的是 Nginx(不是 Apache),而 Nginx 在收到请求前就会拦截超大 body,根本不会把请求交给 PHP。所以即使 upload_max_filesize = 200M、post_max_size = 205M 全对,只要 Nginx 的 client_max_body_size 没调,照样返回 413 Request Entity Too Large。
这个值在 phpEnv 的 Nginx 配置里:打开 C:\phpenv\nginx\conf\nginx.conf,找到 http 或 server 块,添加或修改:
立即学习“PHP免费学习笔记(深入)”;
client_max_body_size 250M;
注意:该指令可放在 http(全局)、server(当前站点)、location ~ \.php$(仅 PHP 路由)三个位置,优先级从低到高。推荐写在 server 块里,避免影响其他静态资源。
- 值必须 ≥ PHP 的
post_max_size,否则 Nginx 层就截断了 - 改完要重启 Nginx:在 phpEnv 面板点「重启 Nginx」,或手动执行
C:\phpenv\nginx\nginx.exe -s reload - 如果用了自定义
location规则(比如把 PHP 转发给 127.0.0.1:9000),确保client_max_body_size写在那个location里,而不是只写在server外面
memory_limit 和 max_execution_time 不配齐,上传会卡死或 500
大文件上传不是“传完就完”,PHP 还得接收、暂存、解析、移动——每个环节都吃内存和时间。只调大小不调这两个,常见现象是:前端进度条走到 99% 卡住、Nginx 返回 504、PHP 错误日志里出现 PHP Fatal error: Allowed memory size of XXX bytes exhausted 或 max_execution_time exceeded。
在同一个 php.ini 文件里补上这两项:
-
memory_limit = 256M(至少比post_max_size大 50%,200M 文件建议设 256M 或 512M) -
max_execution_time = 600(单位秒,10 分钟够传 200M;若走慢网或虚拟机,可设 1200) - 顺手检查
file_uploads = On和upload_tmp_dir是否可写(默认是C:\Windows\Temp,权限通常没问题)
验证是否真生效:别信面板,用 phpinfo() 和 curl 测
phpEnv 没有命令行 php -i 环境,所以不能靠终端查。唯一可靠方式是访问你的 info.php 页面,搜索这四行:
-
upload_max_filesize→ 看值和“Loaded Configuration File”路径是否匹配你改的那个 -
post_max_size→ 必须显示数值,不是no value或0 -
memory_limit和max_execution_time→ 确认不是继承自默认值 - 如果其中任一值没变,说明改错了文件、没重启对应进程、或被其他 ini 文件覆盖(phpEnv 不支持
php.ini分目录加载,基本不存在覆盖问题)
最后一步实测:用 curl 上传一个略超原限制的文件(比如原是 2M,准备一个 5M 的 test.zip):
curl -F "file=@test.zip" http://localhost/upload.php
如果返回空数组或 $_FILES 为空,大概率是 post_max_size 或 client_max_body_size 还卡着;如果报 413,就是 Nginx 没改;如果报 500 且日志有内存/超时错误,就是那俩没配。
最常被忽略的点:phpEnv 启动后,Nginx 和 PHP-CGI 是两个独立进程,改完配置必须分别重启,且顺序无关——但少重启任何一个,上传就一定失败。



















