修改 post_max_size 无效需先确认 php.ini 加载路径,区分 CLI/Web 配置;必须同步调整 upload_max_filesize、memory_limit、Web 服务器限制(如 Nginx client_max_body_size)及超时参数。
php
8.5 修改
有效但不生效?先看 ini 文件加载顺序
改了
里的
,
却没变——大概率是改错了文件。PHP 8.5 启动时会按固定顺序加载多个配置文件,优先级高的会覆盖低的。
能看到实际加载路径,而
页面顶部的 “Loaded Configuration File” 才是你该改的那个文件。
CLI 和 Web(如 Apache/Nginx)可能用不同
:CLI 看
,Web 看
输出
某些 Docker 镜像或云环境会通过
、
或
强制覆盖,这些不能被运行时函数修改
值必须带单位,
合法,
默认是字节,等于限制 64 字节 —— 这是常见误配
php8
.5 中
和
必须同时调大
是整个 POST 请求体上限(含表单字段 + 文件),而
只管单个上传文件。如果只调大前者,上传大文件仍会失败,错误日志里常出现
或静默截断。
设
,则
至少设为
(留出其他字段空间)
若用
或 API 工具发 JSON 表单,也受
限制,不是只有
才走这条链路
PHP 8.5 不再容忍
,启动时会报
修改后重启服务不彻底?确认 SAPI 类型再操作
PHP 8.5 的配置变更是否生效,取决于你用的是哪种 SAPI(Server API)。改完
后:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
Apache:必须重启
或
进程,仅 reload 不够(模块已加载,ini 在进程启动时读取)
Nginx + PHP-FPM:要
,不是只 reload nginx;FPM worker 进程不重启,新配置不会加载
CLI 或测试脚本:直接生效,无需重启,但注意 CLI 用的是独立配置
Docker 容器:改宿主机挂载的 ini 文件后,必须
,build 镜像时写死的配置不会自动更新
为什么调到
还报错?内存和超时也得同步调
不是唯一瓶颈。PHP 8.5 解析大 POST 数据时,会把整个请求体读进内存,若
不够,会触发
;若请求时间太长,
或 Web 服务器超时(如 Nginx 的
、
)也会中断连接。
立即学习
“
PHP免费学习笔记(深入)
”;
Web 服务器层必须同步放开限制:Nginx 要加
到
、
或
块
建议 ≥
,否则解析阶段就崩了
上传大文件时,
也要延长,否则在数据接收中途就被终止
改
看似一行配置,实际牵扯 PHP 加载机制、SAPI 行为、Web 服务器协同和内存模型。最容易漏的是 Nginx 的
—— 它根本不会进 PHP,请求在网关层就被拒了。
post_max_sizephp.inipost_max_sizephpinfo()php --iniphpinfo()php.iniphp --iniphpinfo().htaccessuser.iniphp_admin_valuepost_max_size = 64Mpost_max_size = 64post_max_sizeupload_max_filesizepost_max_sizeupload_max_filesizePHP Warning: POST Content-Length of XXX bytes exceeds the limitupload_max_filesize = 32Mpost_max_size33Mcurlpost_max_sizepost_max_size < upload_max_filesizeWarning: Invalid value for 'post_max_size'php.inihttpdapache2systemctl restart php-fpmdocker restart2Gpost_max_sizememory_limitFatal error: Allowed memory size exhaustedmax_execution_timeclient_max_body_sizefastcgi_read_timeoutclient_max_body_size 2Ghttpserverlocationmemory_limitpost_max_sizemax_input_timepost_max_sizeclient_max_body_size