2011-09-18 104 views
5

我有一個小問題,在PHP上傳多個文件,

我有這個HTML表單:

<form method="post" action="upload.php" enctype="multipart/form-data"> 
    <input type="file" name="myfile[]" /> 
    <input type="submit" /> 
</form> 

,這是upload.php的:

<?php print_r($_FILES); ?> 

當我發送一個文件時,它告訴我這一點:

Array 
(
[myfile] => Array 
    (
     [name] => Array 
      (
       [0] => Krw_Qe4QKmI.mp3 
      ) 

     [type] => Array 
      (
       [0] => 
      ) 

     [tmp_name] => Array 
      (
       [0] => 
      ) 

     [error] => Array 
      (
       [0] => 1 
      ) 

     [size] => Array 
      (
       [0] => 0 
      ) 

    ) 

) 

到目前爲止這麼好。

問題開始時我自己的狀態提升到這樣一個:

<form method="post" action="upload.php" enctype="multipart/form-data"> 
    <input type="file" name="myfile[]" /> 
    <input type="file" name="myfile[]" /> 
    <input type="submit" /> 
</form> 

現在,當我送2個文件,它告訴我這一點:

Array 
(
) 

所以,這裏有什麼問題嗎? 謝謝你,Mor。

+0

你必須告訴你(用代碼'1')第一陣列中的一個錯誤在這裏看到這意味着什麼:。HTTP:// WWW .php.net /手動/ EN/features.file -upload.errors.php –

回答

1

提出了很多建議在這裏。我會放棄它。這是基於@Pekka的評論。

我看到你正在測試的MP3,這可能超過PHP上傳限制。這是因爲在第一個示例中,您實際上有一個上傳錯誤代碼1:The uploaded file exceeds the upload_max_filesize directive in php.ini.。所以即使你的拳頭上傳也不起作用。成功上傳總是有0作爲錯誤代碼。

修改php.ini中你用upload_max_filesize = 10M(或20M,或300M;謹慎是M - 這意味着 - 如省略,帶來很多頭痛的

我建議測試與較小的文件,如我。看你有沒有2M的上載限制

Further reading

0

檢查您的max_file_uploads設置 - 是否超過1?

echo ini_get('max_file_uploads'); 
+0

我確實運行了這個命令,但沒有出現,我也在ini文件中檢查了它自己,它沒有這樣的事情 –

1

我敢打賭,你超過了post_max_size而PHP只是忽略了上傳的文件。

它默認爲8MB。如果你嘗試上傳一個5MB的文件,一切都會奏效。如果您嘗試上傳2個5MB文件,則會超過8MB,並且PHP會忽略發佈的數據。

嘗試在php.ini中增加post_max_size的值。

+0

我做了,沒有任何改變。 –

+0

啓用[log_errors](http://php.net/log_errors)並查看您的服務器的error_log – arnaud576875

+0

即時檢查現在,到目前爲止我可以看到如果我上傳2個小文件它的工作原理,但與更大的文件它不會 –

0

php.ini文件中必須有這樣的事情:

;;;;;;;;;;;;;;;; 
; File Uploads ; 
;;;;;;;;;;;;;;;; 

; Whether to allow HTTP file uploads. 
file_uploads = On 

; Temporary directory for HTTP uploaded files (will use system default if not 
; specified). 
;upload_tmp_dir = 

; Maximum allowed size for uploaded files. 
upload_max_filesize = 50M 


; Maximum number of files that can be uploaded via a single request 
max_file_uploads = 20 

變化upload_max_filesize值,然後重新啓動服務器

+0

我沒有我的ini文件中的max_file_uploads部分,你能告訴我你使用的是哪個系統,並下載鏈接到你的ini文件嗎? –

+0

@Mor你需要修改你自己的php.ini,這是不好的下載別人的 –

+0

這很奇怪,你可以複製和粘貼代碼在你的php.ini文件,這是[php.ini推薦]的內容( http://pastebin.com/QAebhauV)我有PHP 5.2。17 – tttony

0

問題是在你輸入你的元素屬性name="myfile[]"

如果你還沒有標識符,你以後不能在PHP中引用referer到你的文件。 PHP的 - 文件給你同樣的提示: http://www.php.net/manual/en/features.file-upload.multiple.php

多個文件可以輸入使用不同的名稱來上傳。

因此,將名稱更改爲「myfile1」和「myfile2」(或一些更好的名稱;))應該可以解決您的問題。

+0

實際上,您可以*上傳多個具有相同輸入名稱的文件,就像使用的OP:'name []'一樣。 – nevvermind

0

要做到多個文件一次,試着給一個指標是這樣的:

<? For ($count = 0; count < SOME_MAXIMUM; ++$count;): ?> 
<input type="file" name="myfile[<? Echo $count; ?>]" /> 
<? endfor; ?> 
0

我有同樣的問題..我所有的努力都白費了,但最後我發現了一個非常好的注意在PHP手冊。這很簡單,但完全適合我...如果你使用一個表,用於顯示您的 形式輸入時<form>元素<table>元素

「多個上傳可能無法正常工作。在這種 情況下只有第一個文件會被上傳

<form>元素放在之外讓它起作用。

請按照此鏈接查看完整註釋,有一種功能可以以易於使用的方式重新排列多個上傳文件數組。

http://php.net/manual/en/features.file-upload.multiple.php