如何重新定義上傳檔案名稱的實例詳解

怪我咯
發布: 2023-03-07 17:46:01
原創
2723 人瀏覽過

在上傳文件時需要指定上傳文件路徑,但是,如果面對大量用戶上傳的不同文件,難免會有重名的可能,這樣就會造成文件替換,從而導致文件丟失,所以對上傳文件的名稱進行重新定義是非常重要的。本章就帶你了解。怎麼定義上傳檔案的名稱呢?

首先我們透過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[&#39;up_picture&#39;][&#39;error&#39;]>0){                                    //判断文件是否可以上传到服务器
        echo "上传错误";
        switch($_FILES[&#39;up_picture&#39;][&#39;error&#39;]){
            case 1:
                echo "上传文件大小超出配置文件规定值";
                break;
            case 2:
                echo "上传文件大小超出表单中约定值";
                break;
            case 3:
                echo "上传文件不全";
                break;
            case 4:
                echo "没有上传文件";
                break;
        }
    }else{
        if(!is_dir("./upfile/")){                                           //判断指定目录是否存在
            mkdir("./upfile/");                                             //创建目录
        }
        $path=&#39;./upfile/&#39;.time().strstr($_FILES[&#39;up_picture&#39;][&#39;name&#39;],&#39;.&#39;);//定义文件名称和存储位置
        if(is_uploaded_file($_FILES[&#39;up_picture&#39;][&#39;tmp_name&#39;])){           //判断是否通过HTTP POST上传的
            if(!move_uploaded_file($_FILES[&#39;up_picture&#39;][&#39;tmp_name&#39;],$path)){       //执行上传
                echo "上传失败";
            }else{
                echo "文件".time().$_FILES[&#39;up_picture&#39;][&#39;name&#39;]."上传成功,大小为:".$_FILES[&#39;up_picture&#39;][&#39;size&#39;];
            }
        }else{
            echo "上传文件".$_FILES[&#39;up_picture&#39;][&#39;name&#39;]."不合法!";
        }
    }
}
?>
登入後複製

如何重新定義上傳檔案名稱的實例詳解定義上傳檔案的名稱在上傳檔案程式中必是必不可少的一個功能,透過他可以避免重名檔案被替換,單著可能會導致存在很多相同內容的檔案。更多請關注PHP檔案處理專題

【相關文章推薦】

PHP檔案上傳-move_uploaded_file()函數的使用詳解

以上是如何重新定義上傳檔案名稱的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!