定義與用法
move_uploaded_file() 函數將上傳的檔案移到新位置。
若成功,則回傳 true,否則回傳 false。
語法
move_uploaded_file(file,newloc)
參數 | 描述 |
---|---|
file | 必需。規定要移動的文件。 |
newloc | 必需。規定文件的新位置。 |
說明
本函數檢查並確保由 file 指定的檔案是合法的上傳檔案(即透過 PHP 的 HTTP POST 上傳機制所上傳的)。如果文件合法,則將其移至 newloc 指定的文件。
如果 file 不是合法的上傳文件,不會出現任何動作,move_uploaded_file() 將會傳回 false。
如果 file 是合法的上傳文件,但由於某些原因無法移動,不會出現任何操作,move_uploaded_file() 將返回 false,此外還會發出警告。
這種檢查顯得格外重要,如果上傳的文件有可能會造成對使用者或本系統的其他使用者顯示其內容的話。
提示和註解
註解:本函數僅用於透過 HTTP POST 上傳的檔案。
注意:如果目標檔案已經存在,將會被覆蓋。
來自w3c的介紹,下面說說我遇到的問題。
一般來說,我們都會這樣寫保存文件:
$fileName = $_SERVER['DOCUMENT_ROOT'].'/Basic/uploads/'.$_FILES['file']['name']; move_uploaded_file($_FILES['file']['tmp_name'],$fileName )
好了,這下子風險來了:
①直接保存檔案。
這意味著不對文件進行任何識別,如果有用戶上傳了一段後台代碼保存為jpg後綴或者其他,要是管理員一不注意將其以php映射,然後訪問這個後台,- -結果可想而知,要是他在後台執行刪除所有資料庫,整個網站直接GG。總之直接保存文件有很大風險。
②使用與使用者檔案名稱相同的檔案名稱。
上述程式碼如果使用者使用中文檔案名,則會報錯。
一牽涉到文件名,就牽涉到編碼,要是文件名是英文+數字還好,如果包含中文那就頭大了,要重新對其編碼。
我認為可靠的保存,應該是這樣的:
①要對用戶上傳的文件進行識別。
文件識別,這個部分有很多功能,我覺得用MIME type就很好,這個也很難偽造。
②要將檔案名稱改換。
我覺得最好改成時間的格式像「201634104421」這種檔名,也可以將檔名與資料庫相對應起來。
以上就介紹了move_uploaded_file的使用,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。