在上傳檔案時需要指定上傳檔案路徑,但是,如果面對大量使用者上傳的不同檔案,難免會有重名的可能,這樣就會造成檔案替換,從而導致檔案丟失,所以對上傳檔案的名稱進行重新定義是非常重要的。本章就帶你瞭解一下。怎麼定義上傳檔案的名稱呢?
首先我們通過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檔案夾中,並重新定義檔案名稱。
本樣本的關鍵代碼如下:
<?PHPheader("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檔案處理專題