文件上传
目的:用户可以通过浏览器,将本地文件上传到服务器
以单文件上传为例
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);
?>