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 相关文章推荐
使用PHP制作新闻系统的思路
Oct 09 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
php利用事务处理转账问题
Apr 22 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
Yii基于数组和对象的Model查询技巧实例详解
Dec 28 PHP
PHP isset()与empty()的使用区别详解
Feb 10 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
PHP实现统计代码行数小工具
Sep 19 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-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
ie focus bug 解决方法
2009/09/03 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
vue中各组件之间传递数据的方法示例
2017/07/27 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python探索之创建二叉树
2017/10/25 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
如何运行带参数的python脚本
2019/11/15 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
详解Python中的文件操作
2021/01/14 Python
服装设计专业毕业生推荐信
2013/11/09 职场文书
你懂得怎么写自荐信吗?
2013/12/27 职场文书
上班看电影检讨书
2014/02/12 职场文书
质量标语大全
2014/06/12 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python