文件上傳就是將客戶端的文件上傳到服務器端(並不是簡單的copy)
文件上傳需要兩部分:客戶端、服務器端。
php.ini中有一個
file_uploads
示例:
upload_tmp_dir
用於設置文件上傳的臨時保存的目錄,臨時目錄的特點:當腳本執行結束後,臨時文件會被馬上刪除。
upload_max_filesize
用於設置php對上傳文件大小的限制值
一上最多所能上傳文件的限制
由於臨時文件目錄中會有腳本執行結束刪除文件,那麼需在腳本執行結束之前就將上傳的文件,移動另的目錄(專用於存儲文件上傳的目錄)
move_uploaded_file($filename,$target);函數
說明:
$filename是文件名
$target是目錄名(用戶自定義的)
將$filename移動$dirname指定的目錄
$_FIELS:主要用於記錄文件上傳的相關信息
1、定義函數
2、由於需要根據表單元素的name屬性值,在$_FILES數組中找到臨時文件的完整文件名,還不能對前端的input表單元素的name屬性值 限制死。需要後台通過array_keys動態獲取到input表單元素的name屬性值
示例:
代碼:
第3步:獲取臨時文件名
第4步:獲取文件後綴
第5步:封裝隨機生成文件名函數
第6步:調用生成文件名函數
第7步:移動文件
文件上傳錯誤信息
主要保存在$_FILES['name屬性值']['error']
示例:
error的值:
upload_err_ok 0表示沒有錯誤,上傳成功
upload_err_ ini_size 1
upload_err_form_size 2
示例:
<input type="hidden" name="MAX_FILE_SIZE" value="2000000"/>
upload_err_partial 3
upload_err_no_file 4
upload_err_no_tmp_dir 6
upload_err_cant_write 7
示例:
第8步:對錯誤信息判斷
//判斷文件上傳是否成功
switch($arr[$v]['error']){
case 0:
$arrFiles['filename'][]=$fullname;
$arrFiles['code'][]=0;
break;
case 1:
$arrFiles['filename'][]=false;
$arrFiles['code'][]='超過php文件大小限制';
break;
case 2:
$arrFiles['filename'][]=false;
$arrFiles['code'][]='超過form表單文件大小限制';
break;
case 3:
$arrFiles['filename'][]=false;
$arrFiles['code'][]='網絡原因部分上傳';
break;
case 4:
$arrFiles['filename'][]=false;
$arrFiles['code'][]='沒有選擇文件';
break;
case 6:
$arrFiles['filename'][]=false;
$arrFiles['code'][]='沒有臨時目錄';
break;
case 7:
$arrFiles['filename'][]=false;
$arrFiles['code'][]='目錄沒有寫權限';
break;
}