2011-04-17 56 views
2

我正在構建一個頁面,允許將文件上傳到服務器並進行排序。我知道這個代碼即使在工作中也不適合實時生效,但這只是讓機制工作的初稿,因爲我對服務器端腳本很陌生。爲什麼PHP的move_uploaded_file()方法在我的腳本中返回false?

總之,這裏的上傳表單頁面:

<html> 
<body> 
<?php include("header.php"); ?> 
<center> 
<h1>Please enter the details of the file you would like to upload:</h1><br/> 


    <table> 
    <tr> 
    <td align='center'> 
    <form action='uploader.php' method='POST' enctype='multipart/form-data'><b>Name:</b> </td> 
    <td align='left'><input type='text' name='name' maxlength='255' /> 
    </td> 
    </tr> 

    <tr> 
    <td align='center'><b>Description of file uploaded: </b> 
    </td> 
    <td align='left'><textarea name='description' rows='5' cols='20'></textarea> 
    </td> 
    </tr> 

    <tr> 
    <td align='center'><b>Category: </b> 
    </td> 

    <td align='left'> 
    <select name='category'> 
    <option value='1'>Agriculture</option> 
    <option value='2'>Sexual Health</option> 
    <option value='3'>Arithmetic</option> 
    <option value='4'>Technology</option> 
    <option value='5'>Reading/Literature</option> 
    <option value='6'>Health/Medicine</option> 
    </td> 
    </tr> 

    <tr> 
    <td align ='center' > 
    <b>File: </b> 
    </td> 
    <td align='left'> 
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
    <Choose a file to upload: <input name="uploadedfile" type="file" /><br /> 
    </td> 
    </tr> 

    <tr height='20px'></tr> 

    <tr align ='left'> 
    <td> </td> 
    <td> 
    <input type='Submit' value='Upload File' /> 
    </td> 
    </tr> 
    </table> 

</center> 

<?php include("footer.php"); ?> 
</body> 
</html> 

和這裏的操作頁面uploader.php:

<?php 

$target_path = "./audio/"; 

$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
    echo "The file " . basename($_FILES['uploadedfile']['name']) . " has been uploaded"; 
} else{ 
    echo "There was an error uploading the file, please try again!"; 
} 

?> 

每當我試着測試,在我的本地(使用XAMPP)回聲「上傳文件時出錯,請重試!」

而且每幾次,它也說: 「 注意:未定義指數:UploadedFile的在C:\用戶\保羅\桌面\ XAMPP \ htdocs中\ XAMPP \ uploader.php第5行」

但我做不到看不出這個說法有什麼問題?是不是上傳文件定義爲我的表單中的文件的臨時名稱?

你能告訴我我在這裏做錯了嗎?

非常感謝

+1

你的權限是什麼樣的? – Nick 2011-04-17 12:58:26

+0

該文件夾位於我的本地計算機上,並且文件夾似乎沒有任何特殊限制。 – Paul 2011-04-17 13:05:09

+1

發生錯誤時,您可以使用$ _FILES ['uploadedfile'] ['error']並檢查到底發生了什麼(我的猜測是您將文件移至不存在的目錄)。處理文件上傳時,請諮詢php.net如何解釋錯誤消息。 – 2011-04-17 13:05:10

回答

1

問題是:您的HTML無效,導致form元素被提前關閉。

有沒有</form>結束標籤,所以它插入到一個適當的點,即

<td align='center'> 
    <form action='uploader.php' method='POST' enctype='multipart/form-data'> 
    <b>Name:</b> 
    </form> <!-- <- here --> 
</td> 

這樣做,用的名字uploadedfile文件輸入元素之外的形式,並永遠不會被髮送到uploader.php。要解決此問題,請將起始標記移動到table之外,在body末尾附近添加結束標記,並在Choose a file …之前刪除<

還有其他一些驗證錯誤,但我會留給你修復這些錯誤。下一次,請將您的HTML提供給W3C的validator(您可以使用Chris Pederick的Web Developer toolbar自動執行此操作)和/或查看Firebug's/Chrome的網絡檢查器並查看form元素(以及它包含的內容)。

+0

非常感謝你這是確實是這個問題!我只是認爲這是PHP,因爲我是那麼新! 雖然有一件事...我一直在測試這個腳本,現在它的功能...當我上傳.mp3文件時它仍然會導致錯誤。 我認爲這只是一個尺寸問題,但即使是<1mb的音頻文件也無法上傳。 是'文件'應該包含音頻? O.o – Paul 2011-04-17 16:19:02

+0

@Paul:那應該不會引起任何問題;我看到的唯一的事情就是您的粘貼代碼包含最大文件大小規則<100,000字節(≠1 Mb)。如前所述,* always *檢查文件數組的'error'部分的狀態與http://www.php.net/manual/en/features.file-upload.errors.php上的值以及你會知道是否有東西(和*什麼*)出錯(例如'UPLOAD_ERR_FORM_SIZE')。 – 2011-04-17 16:23:45

1

你似乎是正確調用該函數,並在正確的環境中使用它。

至於文件資料方面有兩個實例中,假可從move_uploaded_file函數返回:因爲我們使用的tmp_name元素,我們可以假設這

If filename is not a valid upload file, then no action will occur, and move_uploaded_file() will return FALSE.

並非如此從我們的文件$_FILES陣列中。

If filename is a valid upload file, but cannot be moved for some reason, no action will occur, and move_uploaded_file() will return FALSE. Additionally, a warning will be issued.

所以它必須是與此捕獲所有。我建議開啓display_errors,以便我們看到生成的警告。

+1

我認爲它在之前的地方出錯了,因爲錯誤'Undefined index:uploadedfile'in'$ _FILES'。 – 2011-04-17 13:12:38

+0

我得到的錯誤是:注意:未定義的索引:在C:\ Users \ Paul \ Desktop \ XAMPP \ htdocs \ xampp \ uploader.php上的第8行 注意:未定義的索引:在C:\ Users \ Paul \ Desktop \ XAMPP \ htdocs \ xampp \ uploader.php在線10 – Paul 2011-04-17 13:21:05

1

if ($_FILES['uploadedfile']['error'] != 0)會給你一個錯誤的可能原因。 看看http://www.php.net/manual/en/features.file-upload.errors.php的錯誤代碼

+0

感謝您的輸入,但這應該是一條評論。更重要的是,正如你上面看到的,我已經發布了一條關於這個消息的問題的評論(是的,我知道如果你的代表低於50,你不能發表評論他人的問題)。 – 2011-04-17 13:15:42

+0

嗯,當我這樣做時,我得到一個額外的錯誤: 注意:未定義的變量:目標路徑在C:\用戶\保羅\桌面\ XAMPP \ htdocs \ xampp \ uploader.php在線10 – Paul 2011-04-17 13:34:01

相關問題