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 "不是上傳文件";
}
?>