PHP post_max_size会覆盖upload_max_filesize

时间:2011-10-13 12:29:42

标签: php upload filesize

在我的网站主机中,我看到(通过phpinfo)

  • post_max_size = 8Mb
  • upload_max_filesize = 16Mb

这让我觉得我应该可以上传大到16Mb的文件。 但是,当我通过post方法(正常)执行此操作时,post_max_size接管并声明我发送的内容过多。

允许发送大至16Mb的文件的方法是什么? GET - PUT - 其他?

希望有人能为我澄清这一点。

西蒙

6 个答案:

答案 0 :(得分:78)

upload_max_filesize是任何单个文件的限制。 post_max_size是请求的整个主体的限制,可能包含多个文件。

鉴于post_max_size = 20Mupload_max_filesize = 6M,您最多可以上传3个文件,每个文件6M。如果改为post_max_size = 6Mupload_max_filesize = 20M,则只能在点击post_max_size之前上传一个6M文件。让upload_max_size>无效post_max_size

如何识别过post_max_size并不明显。 $_POST$_FILES将为空,但$_SERVER['CONTENT_LENGTH']将为> 0.如果客户端只是没有上传任何帖子变量或文件,那么$_SERVER['CONTENT_LENGTH']将为0。

答案 1 :(得分:19)

通过POST文件上传完成(通常还有其他方法)。查看包含文件上载字段的表单的method属性;)

任何相关设置的最低限额都会取代更高的设置:

请参阅Handling file uploads: Common Pitfals,其中详细解释了这一点以及如何计算值。

答案 2 :(得分:12)

发送文件上传的常规方法是POST,因此post_max_size也应该是16 Mb或更多。

顺便说一下,memory_limit也起作用。它应该大于16Mb,但由于默认值为128Mb,您将看不到此问题。示例php.ini配置:

post_max_size = 16M
upload_max_filesize = 16M
memory_limit = 128M

如果您可以访问php.ini,请更改这些值,否则您可以尝试在.htaccess文件中更改这些值。

php_value upload_max_filesize 16M
php_value post_max_size 16M 

仅当AllowOverride设置允许时才会有效。否则,你要问你的托管公司。

答案 3 :(得分:6)

您的服务器配置设置允许用户上传最大16MB的文件(因为您设置了upload_max_filesize = 16Mb),但post_max_size仅接受高达8MB的发布数据。这就是它抛出错误的原因。

引自official PHP site

  
      
  1. 要上传大文件,post_max_size值必须大于upload_max_filesize。

  2.   
  3. memory_limit应大于post_max_size

  4.   

您应始终将post_max_size值设置为大于upload_max_filesize值。

答案 4 :(得分:5)

<强>的post_max_size:

  • 设置允许的发布数据的最大大小。此设置也会影响文件上传
  • 要上传大文件,此值必须大于upload_max_filesize
  • 一般来说,memory_limit应该大于post_max_size。
  • PHP默认值:8M

<强>的upload_max_filesize:

  • 上传文件的最大尺寸
  • PHP默认值:2M

memory_limit&gt; post_max_size&gt;的upload_max_filesize

PHP默认值:128M&gt; 8M> 2M

默认情况下,post_max_size应该是upload_max_filesize的4倍。
反过来 memory_limit应该比post_max_size

大16倍

答案 5 :(得分:3)

更改php.ini max_input_vars 1000