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实现Ftp用户的在线管理的代码
Mar 06 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
Nov 03 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 PHP
laravel-admin select框默认选中的方法
Oct 03 PHP
使用PHP开发留言板功能
Nov 19 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 PHP
laravel入门知识点整理
Sep 15 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
Apr 06 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
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
微信支付开发告警通知实例
2016/07/12 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
党员思想汇报范文
2013/12/30 职场文书
魅力教师事迹材料
2014/01/10 职场文书
美德好少年事迹材料
2014/01/19 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
社区交通安全实施方案
2014/03/22 职场文书
政府四风问题整改措施
2014/10/04 职场文书
2014年售票员工作总结
2014/11/19 职场文书
初中思想品德教学反思
2016/02/24 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript