2011-12-17 58 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