2011-12-17 72 views
0

这里有奇怪的行为。当前upload_max_filesize2M我的PHP安装有问题吗?真的很奇怪的PHP行为与多个文件上传,我的不好?

<?php if(isset($_FILES['images'])) var_dump($_FILES['images']); ?> 
<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-type" content="text/html;charset=UTF-8"> 
    </head> 
    <body> 
     <form method="post" action="processupload.php" 
      enctype="multipart/form-data"> 
      <input id="images[]" name="images[]" type="file" multiple="" /> 
      <input name="submit" type="submit" value="Upload" /> 
     </form> 
    </body> 
</html> 

测试显示不同的行为:

  • 大尺寸(12M)的MP3文件:$_FILES['images']没有设置好的
  • 中等大小(4M)MP3文件:$_FILES['images']存在$_FILES['images']['type']是空的$_FILES['images']['size']为空

编辑:找到自己,但我不能回答我自己的问题尚未:

  • 在12M文件$_FILES['images']的情况下是空的,因为后期的数据(大小)的总和比post_max_size要更大(details here
  • 在4M文件type的情况下和size是空的,因为载大小是大于的upload_max_filesize

回答

0

当具有多个上传文件,你将有一个索引0..MaxUploadFiles访问当前的

print_r($_FILES); 

$_FILES[<current_index_for_file>]['images']['error'] 
+0

不正确。即使选择了多个文件,$ _FILES [0] ['images']'也是空的。 – Polmonino 2011-12-17 11:42:53

+0

$ _FILES ['images'] [] ['error']? – djot 2011-12-17 11:44:43

+0

对不起,忘记['错误'],正确设置,我的坏,但类型和大小的奇怪行为仍然存在。 – Polmonino 2011-12-17 11:48:03

0

您只需检查输出,你将数组现在是怎么结构化的。 如果我记得很清楚,你可以访问值:

$_FILES['images']['size'][<index>] 
$_FILES['images']['type'][<index>] 
$_FILES['images']... 
+0

自己找到解决方案,无论如何谢谢。 – Polmonino 2011-12-17 12:02:36

0

,你可以把这些线在你的代码的顶部,因为你在php.ini全局设置是有限的,你可以使用下面的行编程改变

ini_set('post_max_size', '25M'); 
ini_set('upload_max_filesize', '20M'); 

当你增加POST数据更大小,你必须增加脚本的执行时间也否则将抛出致命错误,则可以通过增加脚本的执行时间

ini_set('max_execution_time', 0); 

这里我提到0是无限的,出于安全考虑,你必须测试你的服务器,并限制它几秒钟。

+0

完全错误。脚本在数据上传后执行。出于这个原因,max_execution_time是无用的。由于数据已经上传,因此post_max_size/upload_max_filesize无法更改。 Btw正确anwser是在我的第一篇文章。 – Polmonino 2011-12-18 13:07:59

+0

@Polmonino你可以将这些代码作为两个页面(表单页面和操作页面)的通用代码,并且您应该知道将代码放在哪里可以认为。在分析任何事情之前,不要说完全错误。 cool buddy .. – 2011-12-18 13:24:59

+0

同样,你错了。无论您将'post_max_size'和'upload_max_filesize'放在哪里,因为它们都是PHP_INI_PERDIR(意味着您无法在脚本中更改它们)。并且'max_execution_time'没用,因为只有在上传完成后才执行脚本! – Polmonino 2011-12-18 16:06:07