如何解决PHP文件上传限制的问题

我们在上传文件的时候经常会遇到上传失败,而失败的原因有很多种,这其中就包括nginx对文件上传的限制,还有PHP对文件上传的限制。

注意了,这里说的限制不只是大小的限制,还有上传时间等。今天我们就来说说Nginx和PHP对文件上传的相关限制参数吧?

Nginx相关限制

对于web而言nginx是最上层的代理,对于上传的限制有以下几种:

1. client_max_body_size

客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_max_body_size,HTTP协议会报 413 Request Entity Too Large 错误。就是说如果请求的正文大于client_max_body_size,一定是失败的。如果需要上传大文件,一定要修改该值。默认值:1M

2. client_body_timeout

读取请求实体的超时时间,若超过所设定的大小,返回413错误。默认值:60秒

3. client_header_timeout

读取请求头的超时时间,若超过所设定的大小,返回408错误。默认值:60秒

和上面 client_body_timeout 读取body体一样,仅读取 header头部的时间。

4. proxy_connect_timeout

http请求无法立即被容器(tomcat, php-fpm等)处理,被放在nginx的待处理池中等待被处理。此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒

5. proxy_read_timeout

http请求被容器(tomcat, php-fpm等)处理后,nginx会等待处理结果,也就是容器返回的response。此参数即为服务器响应时间,默认60秒

6. proxy_send_timeout

http请求被服务器处理完后,把数据返回给Nginx的用时,默认60秒。

PHP上传相关限制

1. file_uploads

服务器上的PHP脚本是否可以接受HTTP文件上传。On开启,Off关闭

2. max_execution_time

页面最长执行时间,默认为30秒。即使页面上传时设置超时时间超过这个值,30秒之后也会中断请求,页面报错。与PHP中的 set_time_limit 有相同的作用,但是set_time_limit需要关闭安全模式才起作用。

配置为0,表示不做时间限制

3. post_max_size

定义POST上传数据时最大可上传的大小,默认为2M

如果实际POST过来的数据大于该值,则 $_POST和 $_FILES 这两个全局变量就为空值

示例:post_max_size = 50M

4. upload_max_filesize

定义上传文件时可接受的文件大小的最大值。默认为8M。这个根据实际业务场景配合Nginx进行调整

示例:upload_max_filesize = 50M

5. upload_max_filesize

最大上传文件的大小,此值必须不大于post_max_size值

示例:upload_max_filesize=8M

6.upload_tmp_dir

上传时临时目录,默认为空,系统指定

示例:upload_tmp_dir = '/tmp/phpupload'

7. max_input_time

PHP脚本从客户端接受请求数据的最大时间,这个时间包含了POST、GET和文件上传等数据

示例:max_input_time = 120

8. memory_limit

单个PHP脚本能申请到的最大内存空间。有的时候会因为使用内存超出限制,导致程序出错,可以适当的增大该值。

memory_limit = 100M

有遗漏或者不对的可以在我的公众号留言哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值