2012-01-03 115 views
0

我正在製作一個圖片上傳器,但我遇到了2個錯誤。它們是:PHP:上傳問題

Warning: move_uploaded_file(upload/Corgi 007.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/stationr/public_html/admin/doupload.php on line 12 

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/chroot/tmp/phpMvRSbS' to 'upload/Corgi 007.jpg' in /home/stationr/public_html/admin/doupload.php on line 12 

當我調用move_uploaded_file()方法時發生錯誤。這裏是我的代碼(注意這沒有錯誤檢查什麼,所以只有裸機上傳)。

<?php 
error_reporting(E_ALL); 
error_reporting(-1); 
ini_set('error_reporting', E_ALL); 

$filename = $_FILES["file"]["name"]; 
$filesize = $_FILES["file"]["size"]; 

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/$filename"); 

?> 

回答

1

你沒有檢查如果上傳成功可言:

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { 
    move file ... 
} else { 
    die("Upload failed with error code " . $_FILES['file']['error']); 
} 

的錯誤代碼記錄在這裏:http://www.php.net/manual/en/features.file-upload.errors.php

同時,有沒有「上傳」子目錄無論腳本的當前工作目錄是什麼? Web服務器進程是否具有該目錄的寫入權限?

作爲一個主要的安全漏洞,盲目使用上傳的['name']參數作爲目標文件名允許惡意用戶在服務器上的任意文件上塗鴉。永遠不要盲目使用該文件名。如果上傳文件名是作爲(比如說)../../../../../../etc/passwd提供的,那麼你現在允許有人替換你的系統密碼文件。

+0

呵呵,這是令人尷尬的..在我急匆匆地完全忘了給目標文件夾添加「../」。而且,我知道所有關於上傳的安全方面(上傳只能通過管理員登錄訪問,這也是安全的)。謝謝您的幫助。 – 2012-01-03 01:58:31

+0

不要默默無聞地與安全同行。如果有人設法破解/繞過登錄,你仍然不應該向他們提供垃圾你的服務器的工具。讓他們爲獲得的每一塊土地而戰。 – 2012-01-03 02:00:58