phpenv本身不管理上传限制,需修改当前启用php版本的php.ini文件;运行php --ini或phpinfo()可定位“loaded configuration file”路径。

phpEnv 本身不管理上传限制,它只是 PHP 版本切换工具;真正要改的是当前启用的 PHP 版本对应的 php.ini 文件。
怎么找到 phpEnv 正在用的 php.ini
phpEnv 切换 PHP 版本后,实际生效的是该版本 PHP 的配置文件,不是 phpEnv 自己的配置。常见路径如下:
- Linux/macOS:通常为
/usr/local/phpenv/versions/{版本号}/etc/php.ini(如/usr/local/phpenv/versions/8.1/etc/php.ini) - Windows:一般在
C:\phpenv\versions\{版本号}\php.ini
不确定路径时,直接运行:php --ini 查看 “Loaded Configuration File” 行;
或写个 info.php 输出 phpinfo(),找 “Loaded Configuration File”。
必须同步修改的三个 php.ini 参数
只改 upload_max_filesize 不够,PHP 会静默失败或报 500。这三个值必须协同:
-
upload_max_filesize = 100M:单个文件上限,单位只认M(不是MB),写成100MB就等于0 -
post_max_size = 105M:整个 POST 请求体上限,必须 ≥upload_max_filesize,建议多留 2–5M 给表单字段 -
memory_limit = 256M:至少是post_max_size的 1.5 倍,否则解析大 POST 时直接内存溢出
顺手检查:max_execution_time = 300 和 max_input_time = 300,避免上传中途超时断连。
别漏掉 Web 服务器层的 client_max_body_size(Nginx)或 LimitRequestBody(Apache)
即使 PHP 层全调对了,Nginx/Apache 也会在请求入口就拦下大包:
- Nginx:在
server或location块里加client_max_body_size 100M;,然后执行nginx -t && nginx -s reload - Apache:在虚拟主机或
.htaccess中加LimitRequestBody 104857600(单位是字节),注意.htaccess只对 mod_php 有效,PHP-FPM 下无效
验证是否生效:上传一个略小于你设限的文件,再故意传一个超限的,观察返回是 413(Web 服务器拦截)还是 PHP 的 UPLOAD_ERR_FORM_SIZE(PHP 层拦截)。
phpEnv 环境下重启服务的正确方式
phpEnv 不启动 Web 服务,它只切换 CLI 和 FPM 的 PHP 解释器。所以:
- 如果你用的是 Nginx + PHP-FPM:改完
php.ini后,必须重启对应版本的php-fpm,例如:sudo systemctl restart php81-fpm(Ubuntu/Debian)或brew services restart php@8.1(macOS Homebrew) - Apache 用户:改完
php.ini后需重启httpd或apache2,因为 Apache 是把 PHP 当模块加载的 - 切记:改完不重启,等于没改
最容易被忽略的一点:phpEnv 切换版本后,php-fpm 进程可能还在用旧版本的配置,光 reload 不行,得 restart 才能彻底加载新 php.ini。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











