2010-01-28 87 views
5

基本上缺少的条目时,我有一种形式超过约25文件上传时,PHP $ _FILES数组被裁剪为第一25个条目(0-24),这是不正确。它应该有全部31个。 这只发生在一台特定的服务器上。 Apache与PHP。我试图在其他两台服务器,他们似乎让所有31

难道这是由Apache的一些配置选项造成的?或者更可能是PHP中的配置问题?

我能想到的唯一的事情是可能的LimitRequestFields Apache指令,不过这应该抛出一个错误,而不仅仅是它裁剪到第25,对吗?

我知道,在一个形式有这么多的文件中的字段是不好的做法,然而,这是必要的,由于这个特殊页面所需的功能。我无法解决这个问题。

任何有关这个问题的帮助将不胜感激。

下面的HTML演示了我遇到的问题。

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 

<form enctype="multipart/form-data" action="test.php" method="post"> 
<input type="file" name="field_id_11[0][1]"/> 
<input type="file" name="field_id_11[1][1]"/> 
<input type="file" name="field_id_11[2][1]"/> 
<input type="file" name="field_id_11[3][1]"/> 
<input type="file" name="field_id_11[4][1]"/> 
<input type="file" name="field_id_11[5][1]"/> 

<input type="file" name="field_id_11[6][1]"/> 
<input type="file" name="field_id_11[7][1]"/> 
<input type="file" name="field_id_11[8][1]"/> 
<input type="file" name="field_id_11[9][1]"/> 
<input type="file" name="field_id_11[10][1]"/> 
<input type="file" name="field_id_11[11][1]"/> 
<input type="file" name="field_id_11[12][1]"/> 
<input type="file" name="field_id_11[13][1]"/> 
<input type="file" name="field_id_11[14][1]"/> 
<input type="file" name="field_id_11[15][1]"/> 
<input type="file" name="field_id_11[16][1]"/> 
<input type="file" name="field_id_11[17][1]"/> 
<input type="file" name="field_id_11[18][1]"/> 
<input type="file" name="field_id_11[19][1]"/> 
<input type="file" name="field_id_11[20][1]"/> 
<input type="file" name="field_id_11[21][1]"/> 
<input type="file" name="field_id_11[22][1]"/> 

<input type="file" name="field_id_11[23][1]"/> 
<input type="file" name="field_id_11[24][1]"/> 
<input type="file" name="field_id_11[25][1]"/> 
<input type="file" name="field_id_11[26][1]"/> 
<input type="file" name="field_id_11[27][1]"/> 
<input type="file" name="field_id_11[28][1]"/> 
<input type="file" name="field_id_11[29][1]"/> 
<input type="file" name="field_id_11[30][1]"/> 
<input type="text" name="blah" value="something"/> 
<input type="submit" /> 
</form> 

</body> 
</html> 

回答

3

那“25最大文件”和“只发生在特定服务器上”似乎表明,服务器上的一些配置/安全性的措施。

而“25最大上传”是suhosin PHP extension的默认配置 - 请参阅suhosin.upload.max_uploads配置指令。


该扩展是通过在一些Linux发行版默认(出于安全原因)安装 - Ubuntu的默认提供的,例如,如果我没有记错;您可以检查它是否已在phpinfo()的输出中安装/启用。

+0

谢谢你这么多了点。我不知道甚至存在。 我添加了: suhosin.upload.max_uploads = 到服务器的php.ini文件,现在服务器工作正常。 再次感谢:) 也感谢所有回答的人。这是我第一次使用这个网站。 – Chris 2010-01-28 22:31:55

+0

不客气:-) ;;必须首先为所有事情做好准备*(并且您的问题写得很好,有一个代码示例,标签可以,以及所有内容 - 这对第一个问题来说非常好!)* ;-) – 2010-01-28 22:35:21

0

PHP将上传的文件放入临时目录。因此,您可以通过检查是否有多余的6个文件位于临时目录中来确认问题是出在PHP还是用Apache。

我会做的是得到的第一个文件的位置,然后运行一个循环呼应了所有的文件,在该目录中。如果它是31,它是PHP,如果它是25,它是Apache。

1

查看ini file directives的文件上传部分。

有可用的max_file_uploads限制设置,因为PHP 5.2.12,你可能想看看,如果你正在使用的版本或以上的调整。

同样,upload_max_filesize最大限度地为所有上传的文件结合起来,所以它可能是,你可以在那里打的限制,虽然从描述它听起来更可能是一个max_file_uploads限制的问题。

0

如果查看Suhosin配置设置不起作用。尝试检查php.ini中的upload_max_filesizepost_max_size选项。

0

为什么不使用move_uploaded_file它的工作只是尝试和阵列添加路径和执行此功能,如果不行?副本move_uploaded_file(文件数),这是不好的,但其工作 只是尝试

$file1 = $_POST['file1']; 
$file2 = $_POST['file2']; 
$file3 = $_POST['file3']; 
$file4 = $_POST['file4']; 
$file5 = $_POST['file5']; 
$file6 = $_POST['file6']; 
$array = array($file1,$file2,$file3,$file4,$file5,$file6); 

if(isset($_POST['submit'])) 
{ 
    for($i=0;$i<count($array);$i++) 
    { 
    $dir = $array[$i]; 

    $uploaddir = "dirfiles/"; 
    $uploadfile = $uploaddir.$_FILES['file1']['name']; 
    move_uploaded_file($_FILES['file21']['tmp_name'],$uploadfile); 

    $uploaddir = "dirfiles/"; 
    $uploadfile = $uploaddir.$_FILES['file2']['name']; 
    move_uploaded_file($_FILES['file2']['tmp_name'],$uploadfile); 

      ????????????????????????????????????????????????????? 
      ?????????????????????????????????????????????????????