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采集速度探究总结(原创)
Apr 18 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 PHP
使用laravel的migrate创建数据表的方法
Sep 30 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
laravel框架模型和数据库基础操作实例详解
Jan 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 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
js实现简单计算器
2015/11/22 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
JS实现点击掉落特效
2021/01/29 Javascript
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Django自定义认证方式用法示例
2017/06/23 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
技校生自我鉴定范文
2013/09/26 职场文书
关于旷工的检讨书
2014/02/02 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
小学运动会入场词
2015/07/18 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers