PHP 文件上传限制问题


Posted in PHP onSeptember 01, 2019

PHP 大文件上传占用大量资源,因此需要对上传的大小进行限制,以下为相关的三个参数:

  • client_max_body_size
  • upload_max_filesize
  • post_max_size

与以上相对应的三个报错信息:

Warning: POST Content-Length of 9663102 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

$_FILES['file']['error']==1

nginx错误:413 Request Entiry Too Large

client_max_body_size 用于设置客户端 Request body(请求体)的大小上限,要上传的文件就在 body 体 中,所以此参数可以间接的看做是对文件上传大小的限制。

nginx 服务器通过请求头的 Content-Length 确定 body 体的大小。超过设置的上限会返回错误码 413 Request Entity Too Large,将此参数设置为 0 可以取消对长度的限制。

Syntax:    client_max_body_size size;
Default:   
client_max_body_size 1m;
Context:    http, server, location

client_max_body_size 可以设置在 http、server、location 块中,所以我们可以对域名甚至一个请求地址来提高上传包的大小值。

php错误:

Warning: POST Content-Length of 9663102 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
此时为上传文件大小大于 post_max_size 。

php 无警告但是获取不到上传的文件

此时 $_FILES['file']['error']==1 ,错误原因是上传文件的大小小于 post_max_size 但是大于 upload_max_filesize 。

知识点开扩展:

PHP和Nginx 文件上传大小限制问题解决方法

对于nginx+php的一些网站,上传文件大小会受到多个方面的限制,一个是nginx本身的限制,限制了客户端上传文件的大小,一个是php.ini文件中默认了多个地方的设置。

所以为了解决上传文件大小限定的问题必须要做出多处修改。以下整理了几个地方。

1、修改/usr/local/nginx/conf/nginx.conf 文件,查找 client_max_body_size 将后面的值设置为你想设置的值。比如:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
      # 
      location ~ \.php$ { 
        root      /home/www/htdocs; 
        fastcgi_pass  127.0.0.1:9000; 
        fastcgi_index index.php; 
        fastcgi_param SCRIPT_FILENAME /home/www/htdocs$fastcgi_script_name; 
        include    fastcgi_params; 
   
        client_max_body_size 35m;    #客户端上传文件大小设为35M 
        client_body_temp_path /home/www/nginx_temp;    #设置临时目录 
      }

附录:Nginx有一个Upload组件:

上传速率,上传Body大小,也就是上传文件时可能较大?

client_max_body_size 1024M
upload_limit_rate 158k

如下:      

location /upload {
      upload_pass   /up.php;
      upload_cleanup 400 404 499 500-505;
      #upload_store  /data/app/test.local/upload_tmp;
      upload_store  /tmp;
      upload_store_access user:r;
      client_max_body_size 1024M;
      upload_limit_rate 158k;
      upload_set_form_field "${upload_field_name}_name" $upload_file_name;
      upload_set_form_field "${upload_field_name}_content_type" $upload_content_type;
      upload_set_form_field "${upload_field_name}_path" $upload_tmp_path;
      upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5;
      upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;
      upload_pass_form_field "^.*$";
      #upload_pass_form_field "^pid$|^tags$|^categoryid$|^title$|^userid$|^user_id$|^is_original$|^upload_file_name$|^upload_file_content_type$|^upload_file_path$|^upload_file_md5$|^upload_file_size$";
    }

2、修改php.ini

upload_max_filesize = 8M  
post_max_size = 10M  
memory_limit = 20M 
max_execution_time=300 
file_uploads = On #默认允许HTTP文件上传,此选项不能设置为OFF。
upload_tmp_dir =/tmp/www

在上传大文件时,你会有上传速度慢的感觉,当超过一定的时间,会报脚本执行超过30秒的错误,这是因为在php.ini配置文件中 max_execution_time配置选项在作怪,其表示每个脚本最大允许执行时间(秒),0 表示没有限制。你可以适当调整max_execution_time的值,不推荐设定为0。

总结

以上所述是小编给大家介绍的PHP 文件上传限制问题,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

PHP 相关文章推荐
文章推荐系统(二)
Oct 09 PHP
PHP 编程请选择正确的文本编辑软件
Dec 21 PHP
随时给自己贴的图片加文字的php代码
Mar 08 PHP
三个类概括PHP的五种设计模式
Sep 05 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
PHP简单预防sql注入的方法
Sep 27 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 #PHP
php中的钩子理解及应用实例分析
Aug 30 #PHP
Yii框架分页技术实例分析
Aug 30 #PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 #PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 #PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 #PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 #PHP
You might like
php学习笔记 数组遍历实现代码
2011/06/09 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
javascript模块化简单解析
2016/04/07 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python 不同对象比较大小示例探讨
2014/08/21 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
运动会演讲稿300字
2014/08/25 职场文书
平面设计师岗位职责
2014/09/18 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
培训后的感想
2015/08/07 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS