PHP文件上传大小限制修改

转载 2015年11月21日 16:06:04

出处


在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:
1、php.ini:upload_max_filesize 所上传的文件的最大大小。默认值2M。

2、php.ini:memory_limit 本指令设定了一个脚本所能够申请到的最大内存字节数,默认值8M。如果不需要任何内存上的限制,必须将其设为 -1。如果内存不够,则可能出现错误:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)

3、php.ini:post_max_size 设定POST数据所允许的最大大小。此设定也影响到文件上传。要上传大文件,该值必须大于 upload_max_filesize。

4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds

5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data

6、如果用到mysql的BLOB进行二进制文件存储,则需要设置my.ini:max_allowed_packet=xxM

7、httpd.conf
在 Apache 里面有一个选项是 LimitRequestBody,这个选项可以限制用户送出的 HTTP 请求内容。这个选项可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 内使用,分别可以用在 virtualhost 或目录属性设定。而 LimitRequestBody 的设定值是介乎 0 (无限制) 至 2147483647 (2GB)。
例如要在目录 D:/AppServ/www 设定上传限制为 100K,可以在 .htaccess 或 httpd.conf 加入以下语句:

  • LimitRequestBody 1024000000
  • Options Indexes FollowSymLinks MultiViews ExecCGI
  • AllowOverride All
  • Order allow,deny
  • Allow from all

LimitRequestBody 1024000000Options Indexes FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all


如果透过 .htaccess 设定,储存档案后会立即生效;如透过 httpd.conf 设定,须要重新启动 Apache。
PHP关于文件上传部分,特别提到表单隐藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文档中给出的例子如下:


  • <form enctype="multipart/form-data" action="_URL_" method="POST">
  • <input type="hidden" name="MAX_FILE_SIZE" value="30000">
  • Send this file: <input name="userfile" type="file">
  • <input type="submit" value="Send File">
  • form>

     Send this file:      



这里设置MAX_FILE_SIZE = 30000,期待一种可能,使得浏览器在传送文件之前能够依此作出预先判断,如果文件尺寸大于30000字节,则不执行实际的POST动作。也就是不往服务器发送文件内容,而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。
这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IE和FireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳。

MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果超出,$_FILES['thisfile']['error']会被设置为UPLOAD_ERR_FORM_SIZE(2),同时放弃保存临时文件,将$_FILES['thisfile']['size']置0。
这个例子,没问题,表现正常,当我试图上传一个40多K的文件时,PHP程序报告“文件超过MAX_FILE_SIZE”。
但是,如果我们将表单中的MAX_FILE_SIZE从30000减少到1000,情形又如何呢?
  • 上传800字节的文件,正常;
  • 上传40K的文件,PHP报告文件过大,也正常;
  • 上传3000个字节的文件,PHP未报告错误,它成功保存了文件!出乎意料!
问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后,首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE,然后再增加“已经读到的内容长度(total_bytes)”。这样一来,和预计的结果之间至多会有FILLUNIT字节的误差,而FILLUNIT=1024*5=5K。(点击bug了解详细内容)
这就是说,当MAX_FILE_SIZE<5K时,上传一个大于MAX_FILE_SIZE,但是小于5K的文件是没有问题的。
当然,因为这个设置很容易被绕过,所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且,5K到底是个很小的数值,对大多数上传文件的表单来说没有影响。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的设置,和客户端上传给服务器端的流量大小无关。
Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求,然后传送给php模块,php模块再决定是否保存成临时文件,设置$_FILES全局变量,移交给script进一步处理。
这个Apache的LimitRequestBody选项缺省值=0,允许Request body的最大字节数是2G(Linux + Apache)
最后还要注意的是:
html本身能够post数据也是有限制的,不能超过2G。
FTP客户端有文件偏移指针的2GB边界限制,未使用特殊编译flag编译的ftp服务器端或者客户端,无论在什么FS中都不支持大于2GB的文件。不知道PHP会不会也有这种情况。

php传输文件大小修改的限制

Windows 环境下的修改方法 ================================================================ 第一步:修改在php5下POST文件...
  • u014745198
  • u014745198
  • 2017年01月05日 21:34
  • 887

PHP文件上传及其突破上传文件大小限制

PHP如何实现文件上传 1.表单部分  允许用户上传文件,在HTML表单的声明中要加上一个上传的属性:  enctype = 'multipart/form-data'  表单的metho...
  • qq_34437587
  • qq_34437587
  • 2016年11月06日 17:23
  • 1469

Apache+PHP 解决上传文件大小限制的问题

在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下: 1、php.ini:upload_max_filesize 所上传的文件的最大...
  • aoshilang2249
  • aoshilang2249
  • 2017年06月21日 09:15
  • 833

php中web上传文件的原理及如何限制上传文件的大小及格式

move_uploaded_file();  利用php的文件函数来实现上传 这段代码分为两个文件,一个为upload.html,一个是upload.php upload.htm...
  • Wss0130
  • Wss0130
  • 2014年09月26日 09:21
  • 10665

PHP.ini修改配置下载上传文件大小

查找 post_max_size = 2M (默认为2M)改为想要的大小,如: post_max_size = 100M 通常我们只做了这一步,以为就可以解决问题了。其实还需要看下面一步。 ...
  • wangsg2014
  • wangsg2014
  • 2014年06月18日 17:07
  • 1385

如何设置apache+php的上传文件大小上限

个人感悟: 今天上传订单图片时,发现大点的图片上传不上,觉得应该是上传文件大小上限没设对,遂百度,果然是这样,然后按照前辈们的方法修改之。 刚开始只更改了Apache的上传文件上限设置,没有改...
  • hnyzyty
  • hnyzyty
  • 2015年07月21日 19:11
  • 2649

修改 apache 上传文件大小限制

Windows 环境下的修改方法 ================================================================ 第一步:修改在php5下POST文...
  • xyw_Eliot
  • xyw_Eliot
  • 2013年08月28日 20:47
  • 9352

iis中上传文件大小限制的修改方法

HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求, 原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上...
  • hsg77
  • hsg77
  • 2015年10月26日 18:13
  • 940

修改dede后台上传文件大小限制

1.首先在网站根目录下建一个info.php文件例如:D:\wwwRoot\wp 这个是网站的根目录,在此目录下,新建一个txt文档,输入如下图代码,然后另存为info.php然后在浏览器中访问这个文...
  • forest_fire
  • forest_fire
  • 2016年03月21日 11:08
  • 1090

Git 解除上传文件大小的限制

GitHub上传文件不能超过100M的解决办法 上传项目到GitHub上,当某个文件大小超过100M时,就会上传失败,因为默认的限制了上传文件大小不能超过100M。如果需要上传超过100M的文件,就需...
  • sakawa_x
  • sakawa_x
  • 2017年06月09日 11:51
  • 643
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP文件上传大小限制修改
举报原因:
原因补充:

(最多只允许输入30个字)