文件上傳
目的:用戶可以通過瀏覽器,將本地文件上傳到服務器
以單文件上傳爲例
sinFun.php
<?php
/**
*文件上傳函數
*
*@param string $name 文件上傳文件域的name值
*@param string $dir 文件上傳的指定保存路徑
*@param array $allow 文件上傳允許的文件類型
*
*return string $filename 文件名 失敗時,返回false
*
*/
function uploads($name,$dir,$allow=array('image/jpeg','image/png'))
{
//1. 判斷文件上傳錯誤
if($_FILES[$name]['error'] > 0) {
//文件上傳出錯
switch($_FILES[$name]['error']) {
case 1:
echo '上傳的文件大小超過配置文件中的upload_max_filesize值';
break;
case 2:
echo '上傳文件的大小超過表單提交的最大值';
break;
case 3:
echo '文件只有部分上傳';
break;
case 4:
echo '沒有文件被上傳';
break;
case 6:
echo '找不到臨時文件夾';
break;
case 7:
echo '文件寫入失敗';
break;
default :
echo '其它錯誤';
break;
}
return false;
}
//2. 判斷你上傳文件的類型是否是你想要的類型
if(!in_array($_FILES[$name]['type'],$allow)) {
echo '文件類型不符合';
return false;
}
//3. 獲取上傳文件後綴名
$suffix = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);
//4. 起名字
$filename = date('Ymd').uniqid().mt_rand(0,9999999).'.'.$suffix;
//5. 判斷保存的路徑是否存在
$save_path = rtrim($dir,'/');
$save_path .= '/';
$save_path .= date('Ymd');
// var_dump($save_path);
if(!file_exists($save_path)) {
mkdir($save_path,777,true);
}
//拼接一個完整的保存路徑
$path = $save_path.'/'.$filename;
// var_dump($path);die;
//6 判斷是否是HTTP post方式上傳
if(!is_uploaded_file($_FILES[$name]['tmp_name'])) {
echo '傳輸方式不對';
return false;
}
//7 移動圖片
if(!move_uploaded_file($_FILES[$name]['tmp_name'], $path)) {
echo '移動失敗';
return false;
}
//返回移動成功的文件名
return $filename;
}
?>
upload.html
<!DOCTYPE html>
<html lang="zh" dir="ltr">
<head>
<meta charset="utf-8">
<title>單文件上傳</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
上傳頭像:<input type="file" name="profile" />
<button>提交</button>
</form>
<!--
注意:
1. 表單提交的方式必須是 post
2. form表單中必須添加enctype屬性
3. input 中要設置name屬性
-->
</body>
</html>
upload.php
<?php
include("./sinFun.php");
$result = uploads('profile','./upload',array('image/jpeg','image/png'));
var_dump($result);
?>