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
如何在PHP中使用Oracle数据库(4)
Oct 09 PHP
PHP 字符串操作入门教程
Dec 06 PHP
php的dl函数用法实例
Nov 06 PHP
php中define用法实例
Jul 30 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 PHP
Yii2框架控制器、路由、Url生成操作示例
May 27 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
Oct 21 PHP
PHP实现文件上传与下载
Aug 28 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生成随机密码的几种方法
2011/01/17 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
DOM 事件流详解
2015/01/20 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
js微信支付实现代码
2016/12/22 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
python实现清屏的方法
2015/04/30 Python
Django实现基于类的分页功能
2019/10/31 Python
django中间键重定向实例方法
2019/11/10 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
文秘专业大学生求职信
2013/11/10 职场文书