2010-01-28 123 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); 

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