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
杏林同学录(四)
Oct 09 PHP
用PHP和ACCESS写聊天室(八)
Oct 09 PHP
php学习之变量的使用
May 29 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
深入apache host的配置详解
Jun 09 PHP
php文件缓存类用法实例分析
Apr 22 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 PHP
Laravel框架实现定时Task Scheduling例子
Oct 22 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 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
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
PHP实现百度人脸识别
2019/05/06 PHP
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
vue实现评价星星功能
2020/06/30 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
推荐11个实用Python库
2015/01/23 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python文件操作基本流程代码实例
2017/12/11 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python3.5安装python3-tk详解
2019/04/26 Python
python实现滑雪者小游戏
2020/02/22 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
教师通用专业自荐书范文
2014/02/11 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
泰山导游词
2015/02/02 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android