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
zend framework多模块多布局配置
Feb 26 PHP
基于php无限分类的深入理解
Jun 02 PHP
php 如何获取数组第一个值
Aug 06 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
php+redis实现消息队列功能示例
Sep 19 PHP
is_file和file_exists效率比较
Mar 14 PHP
php将xml转化对象的实例详解
Nov 17 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
看了就知道什么是JSON
2007/12/09 Javascript
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
python中pip的安装与使用教程
2018/08/10 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
会计专业毕业生求职信分享
2014/01/03 职场文书
法律进学校实施方案
2014/03/15 职场文书
歌唱比赛主持词
2014/03/18 职场文书
一年级评语大全
2014/04/23 职场文书
生产车间标语
2014/06/11 职场文书
运动会演讲稿50字
2014/08/25 职场文书
学生检讨书范文
2014/10/30 职场文书
担保书格式
2015/01/20 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
护理自荐信
2019/05/14 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书