PHP學習模塊之文件上傳

1.邏輯:利用HTML爲界面,將文件在線上傳,在PHP文件中利用$_FILES(可以獲取到大小、名字、mime等)、和pathinfo(獲取目錄名、基本名和擴展名)函數獲取文件信息,和設置的信息作比較,可以限制文件上傳的大小、類型、mime,並防止惡意上傳。

2.代碼:html

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>文件上傳</title>
</head>
<body>
	<form action="upload.php" method="post" enctype="multipart/form-data">
		<input type="file" name="file">
		<input type="submit" value="提交">
	</form>

</body>
</html>

upload.php代碼:

<?php 
var_dump($_FILES);
//判斷是否有錯誤號
if($_FILES['file']['error']){
//如果有錯誤,開始尋找錯誤
	switch ($_FILES['file']['error']) {
		case 1:
			$str="上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。";
			break;
		case 2:
			$str="上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。";
			break;
		case 3:
			$str="文件只有部分被上傳";
			break;
		case 4:
		$str= "沒有文件被上傳";
			break;
		case 6:
		$str= "找不到臨時文件夾";
			break;
		case 7:
		$str= "文件寫入失敗";
			break;
		
	}
	echo $str;
	exit;
}
//將文件大小上傳限制在2M以內
if($_FILES['file']['size'] > (pow(1024, 2)) * 2){
	exit("你輸入的文件超出限制");
}
//限制上傳的類型
$allowMime=['image/png','image/jpeg','image/gif','image/wbmp'];
$allosubFix=['png','jpeg','gif','wbmp'];
$info=pathinfo($_FILES['file']['name']);
//var_dump($info);
$subFix=$info['extension'];
//如果文件後綴不一致
if(!in_array($subFix, $allosubFix)){
	exit("不允許的文件名後綴");
}
var_dump ($_FILES['file']['type']);
//如果mime不一致
if(!in_array($_FILES['file']['type'], $allowMime)){
	exit("不允許的mime類型");
}
//拼接上傳路徑
$path='upload/';
//確保文件存在
if(!file_exists($path)){
	mkdir($path);
}
//文件名隨機  uniqud生成唯一id
$name=uniqid().'.'.$subFix;
//和HTML比較,判斷文件是否上傳
if(is_uploaded_file($_FILES['file']['tmp_name'])){
	if(move_uploaded_file($_FILES['file']['tmp_name'],$path.$name)){
		echo '文件上傳成功';

	}else{
		echo '文件上傳失敗';

	}

}else{
	echo "不是上傳文件";
}

 
 ?>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章