PHP學習筆記之PHP文件上傳(五)

文件上傳的相關配置

表單設置
  1. 設定表單數據的提交方式爲POST
  2. 設定enctype屬性值爲:multipart/form-data
  3. 爲了避免用戶等待許久之後才發現上傳文件太大,可以在表單中添加MAX_FILE_SIZE隱藏域,用過設置其value值可以限制上傳文件的大小
//form表單數據以"post"方式傳輸到"file.uploads.php"頁面
<form action="file.uploads.php" method="post">
    //上傳文件標籤
    <input type="file" name="file">
    //設置上傳文件的最大值
    <input type="hidden" name="MAX_FILE_SIZE" vale ="1024">
    //提交標籤
    <input type="submit">
</form>
PHP設置
  1. file_uploads是否允許通過HTTP上傳文件,默認爲ON
  2. upload_max_filesize允許上傳文件大小的最大值,默認爲2M,此指令必須小於post_max_size;
  3. upload_tmp_dir指定上傳文件的臨時存放路徑,這個目錄對於擁有此服務器進程的用戶必須是可寫的,如果未指定則使用系統默認值;
  4. post_max_size控制POST方式提交數據PHP所能接收的最大數據量

二. _FILES數組

  • $_FILES超全局變量作用是存儲各種與上傳文件有關的信息
  • $_FILES是一個二維數組,數組中共有五項
  • $_FILES["userfile"]["name"]上傳文件的名稱
  • $_FILES["userfile"]["type"]上傳文件的類型
  • $_FILES["userfile"]["size"]上傳文件的大小
  • $_FILES["userfile"]["tmp_name"]文件上傳後在服務器端儲存的臨時文件名
  • $_FILES["userfile"]["error"]文件上傳相關的錯誤代碼

三.上傳錯誤信息

$_FILES["userfile"]["error"]提供了在文件上傳過程中出現的錯誤:

  • 1.UPLOAD_ERR_OK (value = 0)如果文件上傳成功返回0;
  • 2.UPLOAD_ERR_INI_SIZE (value = 1)如果試圖上傳的文件大小超出了 uploadmaxfilesize指令指定的值,則返回1;
  • 3.UPLOAD_ERR_FORM_SIZE (value = 2)如果試圖上傳的文件大小超出了MAXFILESIZE指令(可能嵌入在HTML表單中)指定的值,則返回2;
  • 4.UPLOAD_ERR_PARTIAL (value = 3)如果文件沒有完全上傳,則返回3; 如網絡出現錯誤,導致上傳過程中斷;
  • 5.UPLOAD_ERR_NO_FILE (value = 4)如果用戶沒有指定上傳的文件就提交表單,則返回4;

四.文件上傳函數

4-1.is_uploaded_file()

is_uploaded_file(filename)函數確定參數filename指定的文件是否使用HTTP POST上傳,例如:

//獲取上傳文件的信息
$file = $_FILES["file"];
//輸出該信息
print_r($file);
//判斷上傳的文件是否使用http post上傳
if(is_uploaded_file($file['tmp_name'])){
    //是則負責上傳文件
    copy($file['tmp_name'],"test2.txt");
}else{
    //否則輸出上傳失敗
    echo"文件上傳失敗"
}

4-2.move_uploaded_file()

move_uploaded_file(filename,url)作用是將上傳文件從臨時目錄移動到url目標目錄;雖然copy()也可以實現同樣的功能,但move_uploaded_file(filename,url)還提供了一種額外的功能,它將檢查由filename輸入參數指定的文件確實是通過 http post 上傳機制上傳的,如果指定的文件並非上傳文件,則移動失敗,返回false

//獲取上傳文件信息
$file = $_FILES["file"];
//移動上傳文件到目標目錄,返回bool值
$bol = move_uploaded_file($file["tmp_name"],"upload/".$file["name"]);
if($bol){
    //移動成功則輸出"上傳成功",並且使用javescript代碼設置2秒跳轉回原來上傳的頁面
    echo "上傳成功<script>setTimeout(function(){location.href='upload,html'},2000)";
}else{
    //失敗則輸出"上傳失敗"
    echo "上傳失敗"
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章