登录
首页 >  文章 >  php教程

Apache如何设置PHP上传文件大小_调整上传限制的配置步骤【详解】

时间:2026-05-24 14:50:21 135浏览 收藏

你在学习文章相关的知识吗?本文《Apache如何设置PHP上传文件大小_调整上传限制的配置步骤【详解】》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

“413 Request Entity Too Large”是Nginx错误,需同步调整Nginx的client_max_body_size和PHP的upload_max_filesize、post_max_size(后者≥前者),并根据运行模式(mod_php或PHP-FPM)修改对应配置,同时增大max_input_time防上传超时。

Apache如何设置PHP上传文件大小_调整上传限制的配置步骤【详解】

PHP上传失败时显示“413 Request Entity Too Large”

这是Nginx返回的错误,Apache默认不会抛这个错误——如果你在Apache上看到它,说明你前端还套了一层Nginx反代,client_max_body_size 没调。先确认架构:直接访问Apache?还是经过Nginx?别在php.ini里反复折腾却漏了代理层。

实操建议:

  • curl -I http://your-site/ 看响应头里的 Server 字段,确认真实Web服务器
  • 如果是Nginx+Apache组合,必须同步改两处:nginx.confclient_max_body_size 和 Apache后端的PHP限制
  • 只改Nginx不改PHP,上传能进Apache但会被$_FILES丢弃,$_FILES['xxx']['error'] 值为 UPLOAD_ERR_INI_SIZE

修改php.ini里的upload_max_filesizepost_max_size

这两个值不是独立生效的:post_max_size 必须 ≥ upload_max_filesize,否则哪怕单文件没超,带其他表单字段的POST也会被截断。Apache本身不解析PHP配置,它靠PHP-FPM或mod_php加载php.ini,改完要重启对应服务。

常见错误现象:

  • 上传大文件后页面空白,error_log 里有 PHP Warning: POST Content-Length … exceeds the limit
  • $_FILES 数组为空,但 $_POST 也收不到数据——大概率是 post_max_size 卡住了整个请求体
  • 设了 upload_max_filesize = 50M 却仍传不过32MB,检查 post_max_size 是否还是默认的 8M

推荐配法(以50MB为例):

upload_max_filesize = 50M
post_max_size = 52M

多留2MB防multipart边界和字段开销。别写 50MB,单位只能是 KMG(大小写敏感,m无效)。

Apache虚拟主机里用php_admin_value覆盖全局配置

共享主机或不能改全局php.ini时,得在VirtualHost.htaccess里设。但注意:php_admin_value 只在Apache用mod_php时有效;PHP-FPM下完全不认这个指令,会直接报错 Invalid command 'php_admin_value'

使用场景:

  • 确认运行模式:phpinfo() 页面看 Server APIApache 2.0 Handler 还是 FPM/FastCGI
  • mod_php可用:php_admin_value upload_max_filesize "50M"php_admin_value post_max_size "52M"
  • PHP-FPM必须改池配置(如 /etc/php/*/fpm/pool.d/www.conf),加 php_admin_value[upload_max_filesize] = 50M

max_execution_timemax_input_time对大文件上传的实际影响

上传耗时主要卡在网络传输和磁盘写入,不是PHP执行代码。所以光调max_execution_time没用——它只管脚本运行时间,不包括上传等待。真正该拉长的是max_input_time(默认60秒),它控制整个请求体读取的超时。

容易踩的坑:

  • max_execution_time设成0(无限),但max_input_time仍是60秒,上传到59秒时连接直接断
  • set_time_limit(0) 放在脚本开头,对已开始的上传阶段无效
  • 云环境(如AWS ALB、Cloudflare)有自己默认的1分钟请求超时,PHP调再久也没用,得去改负载均衡器设置

建议值(配合50MB上传):

max_input_time = 300
; max_execution_time 可设为 120,够处理后续逻辑就行

上传路径越长、网络越差,max_input_time 越要留足余量。这个值一旦设小,错误不会报在PHP里,而是表现为连接重置或空响应。

到这里,我们也就讲完了《Apache如何设置PHP上传文件大小_调整上传限制的配置步骤【详解】》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>