文件上傳的相關配置
表單設置
- 設定表單數據的提交方式爲POST
- 設定enctype屬性值爲:
multipart/form-data
- 爲了避免用戶等待許久之後才發現上傳文件太大,可以在表單中添加
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設置
file_uploads
是否允許通過HTTP上傳文件,默認爲ONupload_max_filesize
允許上傳文件大小的最大值,默認爲2M,此指令必須小於post_max_size
;upload_tmp_dir
指定上傳文件的臨時存放路徑,這個目錄對於擁有此服務器進程的用戶必須是可寫的,如果未指定則使用系統默認值;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 "上傳失敗"
}