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 相关文章推荐
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
Mar 19 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
详解json在php中的应用
Sep 30 PHP
PHP单例模式模拟Java Bean实现方法示例
Dec 07 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
php判断IP地址是否在多个IP段内
Aug 18 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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
8个必备的PHP功能开发
2015/10/02 PHP
PHP 类与构造函数解析
2017/02/06 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
js实现二级导航功能
2017/03/03 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
Python2中的raw_input() 与 input()
2015/06/12 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
2014新年寄语
2014/01/20 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
2015年科室工作总结
2015/04/10 职场文书
高三物理教学反思
2016/02/20 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
Nginx动静分离配置实现与说明
2022/04/07 Servers
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL