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 相关文章推荐
第十节--抽象方法和抽象类
Nov 16 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
PHP session_start()问题解疑(详细介绍)
Jul 05 PHP
php筛选不存在的图片资源
Apr 28 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
Aug 17 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP实现SMTP邮件的发送实例
Sep 27 PHP
PHP扩展安装方法步骤解析
Nov 24 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 pki加密技术(openssl)详解
2013/07/01 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
页面版文本框智能提示JS代码
2009/11/20 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
微笑面对生活演讲稿
2014/09/23 职场文书
荆州古城导游词
2015/02/06 职场文书
户外亲子活动总结
2015/05/08 职场文书
地道战观后感2000字
2015/06/04 职场文书
横空出世观后感
2015/06/09 职场文书
入党函调证明材料
2015/06/19 职场文书