php8.4上传文件大小限制怎么改_php8.4上传配置调整说明【指南】

PHP 8.4 文件上传大小由 upload_max_filesize 和 post_max_size 共同决定,且需同步调大;还需调整 max_execution_time、max_input_time、memory_limit,并检查 Nginx 的 client_max_body_size。

PHP 8.4 上传文件大小限制不是单独由 PHP 版本决定的,而是由 php.ini 中几个关键配置项共同控制的。改对地方才能生效,改错一个就白调。

upload_max_filesize 和 post_max_size 必须同时调大

这两个值是硬性门槛:upload_max_filesize 控制单个文件上限,post_max_size 控制整个 POST 请求体总大小(含文件、表单字段等)。如果后者比前者小,哪怕文件本身没超,上传也会失败并静默卡在 $_FILES 为空或 error = 1UPLOAD_ERR_INI_SIZE)。

  • upload_max_filesize 必须设为你要支持的最大单文件尺寸,比如 20M
  • post_max_size 至少要比 upload_max_filesize 大一点(建议 +2M),例如 22M;它不能写成 0 或留空
  • 两者单位必须一致(MG),且不支持小数,如 1.5M 是非法的,得写 1536K2M

max_execution_time 和 max_input_time 可能导致超时中断

大文件上传耗时长,如果 PHP 脚本执行时间或输入解析时间被掐断,会直接报 500 或返回空响应,$_FILES 看不到任何内容,错误日志里可能是 Maximum execution time of X seconds exceeded

  • max_execution_time 建议设为 300(5 分钟)或更高,尤其用 move_uploaded_file() 写入慢盘时
  • max_input_time 控制 POST 数据接收时限,也需同步调高,比如设为 300;设为 -1 表示不限制(不推荐生产环境)
  • 注意:这些超时值对 CLI 模式无效,只影响 Web SAPI(如 FPM、Apache module)

memory_limit 不够会导致上传失败但报错隐蔽

PHP 在接收上传文件时,会把整个文件内容暂存进内存(除非启用了临时文件流机制),如果 memory_limit 不足,可能触发 Fatal error: Allowed memory size exhausted,或者更糟——静默失败、$_FILES 为空、无错误码。

  • 建议将 memory_limit 设为至少 256M(上传 100MB 文件时,实际内存占用常达 1.5 倍)
  • 不要设为 -1,FPM 下可能导致 worker 进程被 OOM killer 杀掉
  • 可通过 ini_get('memory_limit') 在脚本开头验证是否生效

确认配置已加载且未被覆盖

PHP 8.4 支持多层配置(主 php.iniconf.d/ 下文件、.htaccess、ini_set()),但上传相关参数仅在主配置中生效,运行时无法用 ini_set() 修改。

  • php --ini 查看当前加载的配置路径
  • 在 Web 环境中访问 phpinfo() 页面,搜索 upload_max_filesize,确认“Loaded Configuration File”路径和对应值
  • 检查是否有多个 php.ini.user.ini 干扰;Nginx + FPM 场景下,确保修改的是 FPM pool 对应的 php_admin_value 配置,而非全局 Apache 的
  • 改完必须重启 PHP 服务(systemctl restart php8.4-fpmservice apache2 restart
; 示例:php.ini 中应设置的关键段落
upload_max_filesize = 20M
post_max_size = 22M
max_execution_time = 300
max_input_time = 300
memory_limit = 256M

最常被忽略的一点:Nginx 自身也有 client_max_body_size 限制,即使 PHP 全放开,Nginx 会在请求到达 PHP 前就直接返回 413 Request Entity Too Large。别只盯着 php.ini。