2011-06-04 37 views
3

我有一個HTML輸入字段,如HTML輸入:上傳多個文件馬克塞斯在20

<form method="post" action="process.php" enctype="multipart/form-data"> 
    <div> 
     <h3>Files:</h3> 
     <input type="file" multiple="multiple" name="image[]" /> 
     <input type="submit" value="Upload Image" /> 
    </div> 
</form> 

而且我希望用戶能夠在一次上傳多個文件。我的php爲此使用for循環遍歷所有文件,收集每個文件的信息,然後逐個上傳。

for($i = 0;$image['name'][$i] == true;$i++) 
{ 
    //code 
} 

但這不會上傳超過20個,有錯誤,Notice: Undefined offset: 20 in F:\www\hdp\process.php on line 39結束。現在,如果我要上傳5張圖片,它會給我Notice: Undefined offset: 5 in F:\www\hdp\process.php on line 39,但這樣可以,因爲它仍會上傳所有5張照片(0,1,2,3,4)。我需要它上傳用戶添加的所有照片。
我知道一次上傳大量文件可能是一個壞主意,但它只是網站管理員,它是一個攝影作品集網站。所以他需要能夠一次上傳很多照片。如果它很重要,它們將被上傳到MySQL數據庫。

+0

...請告訴我你不是依靠register_globals。你不是,對吧? ; _; – damianb 2011-06-04 16:33:46

回答

1

我有點被「不會上傳超過20」的一部分困惑......你有什麼基礎上的呢?看起來你看起來錯誤。

改變你的循環來檢查isset($ image ['name'] [$ i]),而不會再有錯誤。

for($i = 0; isset($image['name'][$i]); $i++) 
{ 
    //code 
} 

如yes123所述,您可能會遇到最大的POST大小並應檢查php.ini。

+0

當我告訴輸入選擇,比如60個文件時,它仍然在索引20處退出。 – DavidR 2011-06-04 16:40:16

+1

在$ image上運行一個var_dump,看看你在變量本身中有什麼。 – damianb 2011-06-04 16:43:30

+1

@DavidR我會推薦使用另一種上傳方法,如在這裏找到的那​​些:http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=multiple+uploader+flash+php – Fosco 2011-06-04 16:47:23

1

檢查您的php.ini設置爲post_max_size

而且

upload_max_filesize 
memory_limit 
max_execution_time 
max_input_time 
+0

使用'ini_set()'爲每個這些,仍然退出20. – DavidR 2011-06-04 16:48:55

+0

您不能使用ini_set。把它們放在php.ini – dynamic 2011-06-04 16:51:07

0

到Fosco的解決方案類似,但不同的工作(使用的sizeof和INT爲int的比較,而不是isset)

非此非彼他是一定要解決這個問題沒有更好的,只是方式不同。

for($i = 0, $size = sizeof($image['name']); $i < $size; $i++) 
{ 
    //code 
} 

而且不,它不運行sizeof()每次迭代。這是一種簡化性能的方法。

10

max_file_uploads in php.ini設置是原因。改變它到你想要的,它會起作用。

+0

最後回答審查:感謝您的輸入! – Sepster 2012-10-03 13:57:23