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 相关文章推荐
Snoopy类使用小例子
Apr 15 PHP
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
php 定义404页面的实现代码
Nov 19 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
PHP的拦截器实例分析
Nov 03 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
php返回字符串中所有单词的方法
Mar 09 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
Yii 使用intervention/image拓展实现图像处理功能
Jun 22 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下使用strpos需要注意 === 运算符
2010/07/17 PHP
php简单提示框alert封装函数
2010/08/08 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
php导出excel格式数据问题
2014/03/11 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
php网页病毒清除类
2014/12/08 PHP
PHP中Array相关函数简介
2016/07/03 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
python三元运算符实现方法
2013/12/17 Python
Python变量赋值的秘密分享
2018/04/03 Python
Python实现的端口扫描功能示例
2018/04/08 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
基于keras中的回调函数用法说明
2020/06/17 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
身份证丢失证明
2015/06/19 职场文书
mysql函数之截取字符串的实现
2022/08/14 MySQL