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脚本的10个技巧(7)
Oct 09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
PHP 中常量的知识整理
Apr 14 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 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生成PDF格式文件并且加密
2015/06/22 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
js解决movebox移动问题
2016/03/29 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
webpack3+React 的配置全解
2017/08/21 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
python:socket传输大文件示例
2017/01/18 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
Django实现文件上传和下载功能
2019/10/06 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
大学生入党积极分子自我评价
2014/09/20 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
天坛导游词
2015/02/02 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
大学军训心得体会800字
2016/01/11 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers