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&mysql(六)
Oct 09 PHP
PHP数组内存耗用太多问题的解决方法
Apr 05 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
使用PHP生成二维码的两种方法(带logo图像)
Mar 14 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
php数组合并与拆分实例分析
Jun 12 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 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/12/30 PHP
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
function, new function, new Function之间的区别
2007/03/08 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
jQuery使用方法
2017/02/04 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
Python多线程编程简单介绍
2015/04/13 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python打包可执行文件的方法详解
2016/09/19 Python
python 容器总结整理
2017/04/04 Python
Python中property属性实例解析
2018/02/10 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
企业门卫岗位职责
2013/12/12 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
致接力运动员加油稿
2015/07/21 职场文书
培训后的感想
2015/08/07 职场文书
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers