post_max_size过小导致上传失败时,需按顺序检查并修改php.ini、.htaccess(仅Apache)、Nginx的client_max_body_size、Suhosin扩展等五处配置,且post_max_size必须≥upload_max_filesize。

如果您在查看 phpinfo() 页面时发现 post_max_size 的值过小,导致文件上传失败,则可能是由于 PHP 配置中该参数限制了 POST 请求的总数据大小。以下是修改 post_max_size 值的具体操作步骤:
一、修改 php.ini 文件中的 post_max_size
此方法直接调整 PHP 的全局配置,适用于拥有服务器管理权限的用户。post_max_size 必须大于或等于 upload_max_filesize,否则上传将被拒绝。
1、通过命令查找 php.ini 文件路径:执行 php --ini 或在 phpinfo() 页面中查找 “Loaded Configuration File” 对应的路径。
2、使用文本编辑器打开该 php.ini 文件,例如 vim 或 nano。
立即学习“PHP免费学习笔记(深入)”;
3、搜索 post_max_size,找到类似 post_max_size = 8M 的行。
4、将其修改为所需值,例如 post_max_size = 64M。注意数值后必须带单位(M 或 MB 均可,但推荐用 M)。
5、同时检查并确保 upload_max_filesize 的值不大于 post_max_size,例如设为 upload_max_filesize = 32M。
6、保存文件后,重启 Web 服务器:Apache 用户执行 sudo systemctl restart apache2,Nginx + PHP-FPM 用户执行 sudo systemctl restart php-fpm 和 sudo systemctl restart nginx。
二、通过 .htaccess 文件临时覆盖(仅限 Apache)
此方法无需修改 php.ini,适用于共享主机且支持 .htaccess 覆盖的环境,但要求 Apache 启用了 AllowOverride Directive。
1、在网站根目录(如 public_html 或 htdocs)下创建或编辑 .htaccess 文件。
2、添加以下两行指令:
php_value post_max_size 64M
php_value upload_max_filesize 32M
3、保存文件,无需重启服务,配置立即生效(需确保 PHP 以模块方式运行,而非 CGI/FastCGI)。
4、若访问页面报错 500,说明主机禁用了 php_value 指令,应改用其他方法。
三、通过 ini_set() 在脚本中动态设置(有限制)
此方法仅对当前脚本生效,且无法在运行时修改 post_max_size —— 因为该参数属于 PHP 的“PHP_INI_PERDIR”类型,在请求开始解析 POST 数据前已锁定,ini_set() 对 post_max_size 无效。但可用于验证其他可调参数或调试。
1、在 PHP 脚本开头添加:ini_set('upload_max_filesize', '32M');
2、该设置不会影响 post_max_size,也不会改变已接收的 POST 数据;仅用于兼容性占位或日志提示。
3、可通过 var_dump(ini_get('post_max_size')); 确认当前值未被动态更改。
四、修改 Nginx 配置中的 client_max_body_size
当使用 Nginx 作为反向代理或 Web 服务器时,其自身限制会先于 PHP 生效。若未同步调整,即使 php.ini 已修改,上传仍会被 Nginx 拒绝。
1、编辑站点对应的 Nginx 配置文件,通常位于 /etc/nginx/sites-available/your-site 或 /usr/local/nginx/conf/nginx.conf。
2、在 server 或 location 块内添加:client_max_body_size 64M;
3、确保该指令位于处理 PHP 的 location ~ \.php$ 块内部或其上级作用域。
4、执行 sudo nginx -t 验证语法,无误后运行 sudo systemctl reload nginx 重载配置。
五、检查 Suhosin 扩展限制(如已启用)
部分旧版服务器安装了 Suhosin 安全扩展,它会额外限制 POST 数据大小,且优先级高于 php.ini 设置。
1、在 phpinfo() 页面中搜索 suhosin,确认是否启用。
2、若启用,查找 suhosin.post.max_value_length 和 suhosin.request.max_value_length 参数。
3、编辑 suhosin.ini(通常位于 /etc/php/*/mods-available/suhosin.ini),添加或修改:
suhosin.post.max_vars = 2000
suhosin.request.max_vars = 2000
suhosin.post.max_value_length = 67108864
suhosin.request.max_value_length = 67108864
4、重启 PHP 服务使 Suhosin 配置生效。











