在上傳文件時需要指定上傳文件路徑,但是,如果面對大量用戶上傳的不同文件,難免會有重名的可能,這樣就會造成文件替換,從而導致文件丟失,所以對上傳文件的名稱進行重新定義是非常重要的。本章就帶你了解。怎麼定義上傳檔案的名稱呢?
首先我們透過strstr()函數對上傳檔案的名稱進行截取,取得上傳檔案的後綴。
然後透過time()函數取得系統目前時間戳,重新定義上傳檔案的名稱
在利用move_uploaded_file()函數實作檔案上傳。
在執行檔案上傳之前,為了防止潛在的攻擊,對原本無法透過腳本互動的檔案進行非法管理,應利用is_uploaded_file()函數判斷指定的檔案是否透過HTTP POST上傳的,如果是,則傳回一個true。
is_uploaded_file()函數
is_uploaded_file()函數判斷指定的檔案是否透過HTTP POST上傳的,其語法如下:
is_uploaded_file(filename)
參數 filename必須指定類似$_FILES['filename']['tmp_name']的變量,不可以使用從客戶端上傳的檔案名稱$_FILES['filename']['name']
#透過is_uploaded_file()函數對上傳文件進行判斷,可以確保惡意使用者無法欺騙腳本去存取不能存取的文件,如/etc/passwd。
move_uploaded_file()函數
#move_uploaded_file()函數將檔案上傳到伺服器中指定的位置。如果成功回傳true。否則傳回false,語法如下
move_uploaded_file(filename,destination)
參數filename指定上傳檔案的暫存檔案名,即$_FILES[tmp_name];參數destination指檔案上傳後儲存的新路徑和名稱。如果參數filename不是合法的上傳文件,則不會出現任何操作,
move_uploaded_file() 將傳回false;如果參數filename是合法的上傳文件,但出於某些原因無法移動,也不會出現任何的操作,move_uploaded_file()將傳回False,此外還會發出警告訊息。
最後使用rand函數,並使用它隨機產生的隨機整數作為上傳檔案的新名稱。
應用範例
#本範例重新定義上傳檔案的名稱,選擇要上傳檔案的名稱,按一下「上傳」按鈕,檔案將上傳到程式中指定的本機路徑下的upfile資料夾中,並重新定義檔案名稱。
本範例的關鍵程式碼如下:
<?PHP header("content-type:text/html;charset=utf-8"); if(!empty($_FILES[up_picture][name])){ //判断上传文件是否为空 if($_FILES['up_picture']['error']>0){ //判断文件是否可以上传到服务器 echo "上传错误"; switch($_FILES['up_picture']['error']){ case 1: echo "上传文件大小超出配置文件规定值"; break; case 2: echo "上传文件大小超出表单中约定值"; break; case 3: echo "上传文件不全"; break; case 4: echo "没有上传文件"; break; } }else{ if(!is_dir("./upfile/")){ //判断指定目录是否存在 mkdir("./upfile/"); //创建目录 } $path='./upfile/'.time().strstr($_FILES['up_picture']['name'],'.');//定义文件名称和存储位置 if(is_uploaded_file($_FILES['up_picture']['tmp_name'])){ //判断是否通过HTTP POST上传的 if(!move_uploaded_file($_FILES['up_picture']['tmp_name'],$path)){ //执行上传 echo "上传失败"; }else{ echo "文件".time().$_FILES['up_picture']['name']."上传成功,大小为:".$_FILES['up_picture']['size']; } }else{ echo "上传文件".$_FILES['up_picture']['name']."不合法!"; } } } ?>
定義上傳檔案的名稱在上傳檔案程式中必是必不可少的一個功能,透過他可以避免重名檔案被替換,單著可能會導致存在很多相同內容的檔案。更多請關注PHP檔案處理專題
【相關文章推薦】
PHP檔案上傳-move_uploaded_file()函數的使用詳解
以上是如何重新定義上傳檔案名稱的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!