2011-04-01 94 views
7

這聽起來像一個愚蠢的問題,但上傳一個文件後,該文件不在php所說的位置。文件上傳不在/ tmp

首先,簡單的測試頁:

<html><body> 
<h1><?=$_FILES['imgup']['tmp_name'];?></h1> 
<? 
     print_r($_FILES); 
?> 
<form enctype="multipart/form-data" method="post" action="upload.php"> 
<input type="file" name="imgup" id="imgup"> 
<input type="submit"> 
</form> 
</body></html> 

現在,以純文本的print_r:

Array ([imgup] => Array ([name] => ace.jpg [type] => image/jpeg [tmp_name] => /tmp/phpEdfBjs [error] => 0 [size] => 29737)) 

因此,沒有誤差,標準尋找路徑,但/ tmp中有沒有這樣的文件。此外,在我的整個系統上運行一個查找就會出現bubkis。

FYI:php.ini中有

max_execution_time = 120 
file_uploads = On 
upload_max_filesize = 2M 

和我已經上傳的文件是29K

有什麼想法?

回答

16

當接收到它的PHP腳本運行完畢時,臨時文件被刪除:它只是一個臨時文件。

PHP腳本到您發佈形式 - upload.php的 - 應該移動臨時文件到非臨時位置,使用move_uploaded_file()


基本上,這個想法是:

  • 用戶上傳文件到您的腳本,
    • 該文件存儲在臨時文件中。
  • 您的腳本在該文件上的工作原理:
    • 檢查文件是否OK (內容類型,大小,...)
  • 如果文件是確定的,你的腳本將其移動到永久存儲目錄(徘徊無論你想)

如果上載未成功完成,或者如果你不動ŧ他在其他地方文件,臨時文件被自動刪除。


作爲參考,您應仔細閱讀說明書的以下部分:Handling file uploads - POST method uploads

引用這是關係到你的問題它的一部分:

該文件將從中刪除 請求結束時的臨時目錄,如果它尚未被移走 或重命名。

+0

好吧,我補充說:$ mv = move_uploaded_file($ _ FILES ['imgup'] ['tmp_name'],「/var/www/testimg.jpg」);到文件的頂部。 $ mv總是假的,沒有發出警告。我在那裏做錯了什麼? – 2011-04-01 16:23:02

+1

你的web服務器的用戶*(如某些Linux發行版中的www-data)有權寫入'/ var/www /'嗎? – 2011-04-01 16:24:52

+0

解決了它。非常感謝! – 2011-04-01 16:37:10