2008-12-11 103 views
0

我的PHP腳本存在一個非常奇怪的問題。PHP文件上傳問題

我上傳了幾個文件,並讓PHP把它們放在一個文件夾中。 我在發送隨機文件和發送隨機文件時遇到了麻煩。所以我調試它,並從$ _FILES []數組得到了一個非常奇怪的結果。

我試了3個文件。

$_FILES["addFile"]["name"]保存3個文件的名稱。

您會希望$_FILES["addFile"]["tmp_name"]能夠保存PHP用來複制文件的3個臨時名稱,但事實並非如此。它只有一個名字。另外兩個是空字符串,它會在上傳時產生錯誤(我從顯示中壓縮)

這很奇怪。我已經嘗試了多種情況,並且一直在發生。 這一定是我的設置或甚至我的代碼中的東西。

這裏是我的代碼:

$i = 0; 
    if (!empty($_FILES['addFile'])) { 
    foreach($_FILES['addFile'] as $addFile) { 
     $fileToCopy = $_FILES["addFile"]["tmp_name"][$i]; 
     $fileName = $_FILES["addFile"]["name"][$i]; 
     $i++; 
     if(!empty($fileToCopy)){ 
     $copyTo = $baseDir."/".$fileName; 
     @copy($fileToCopy, $copyTo) or die("cannot copy ".$fileToCopy." to ".$copyTo); 
     } 
    } 
      exit(0); 
    } 

由於tmp_name的值是空的,如果值將是錯誤的,所以它會跳過die()函數。

有沒有人知道可能是什麼原因造成的?

更多信息:我正在使用Windows XP,運行WAMP服務器。從未有過這個問題,我可以訪問我試圖上傳的所有地圖。 Windows的安全設置不是我想的問題。

回答

1

相關,但可能不會幫助:但move_uploaded_file是處理上傳文件的一種(稍微)更好的方式,而不是複製。

是否有任何文件很大? PHP對文件大小,它可以上傳他們的時限......

不如你送到這裏不是試圖寫了什麼,它說:

http://uk3.php.net/manual/en/features.file-upload.common-pitfalls.php

+0

這確實是,它確實給我的大小限制。 Cursus,我將不得不查找如何克服這一點。 – Vordreller 2008-12-11 11:39:55

+0

我的意思是「curses」 – Vordreller 2008-12-11 11:42:23

1

你的循環邏輯是不正確。您直接在文件輸入名稱上使用foreach循環,其中存儲了幾個您不感興趣的屬性('type','size'等)。

,你應該從第一個文件獲取文件的數量和使用它作爲環路長度:

if (!empty($_FILES['addFile']) && is_array($_FILES['addFile']['name'])) { 
    $length = count($_FILES['addFile']['name']); 
    for($i = 0; $i < $length; $i++) { 
     $result = move_uploaded_file($_FILES['addFile']['tmp_name'][$i],$baseDir."/" . $_FILES['addFile']['name'][$i]); 
     if($result === false) { 
      echo 'File upload failed. The following error has occurred: ' . $_FILES['addFile']['error'][$i]; 
     } 
    } 
} 

檢查錯誤代碼,如果你仍然有問題,它應該提供你需要調試的所有信息它。

3

對不起,但它接縫給我,你試圖上傳所有3個文件具有相同的變量名?這是正確的嗎? 但是這不起作用,因爲它們會覆蓋對方。 我認爲更好的更清潔的方式將是使用類似

$i = 0; 
    foreach($_FILES['addFile'.$i] as $addFile) { 
    if(!empty($addFiles) { 
     move_uploaded_file($addFile['temp_name'], 'YOUR DIRECTORY'); 
    } 
     $i++; 
    }