如何重新定義上傳檔案名稱的執行個體詳解

來源:互聯網
上載者:User
在上傳檔案時需要指定上傳檔案路徑,但是,如果面對大量使用者上傳的不同檔案,難免會有重名的可能,這樣就會造成檔案替換,從而導致檔案丟失,所以對上傳檔案的名稱進行重新定義是非常重要的。本章就帶你瞭解一下。怎麼定義上傳檔案的名稱呢?

首先我們通過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檔案處理專題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.