单文件上传思路
----------------------------------------
1.需要一个上传文件的表单页面
表单页面需要设置POST方式提交 method="POST",并设置以附件类型上传
enctype="multipart/form-data"
表单中需要一个文件域
<input type="file" name="file" >
type="file" 说明是文件域
name="file" 用于接收上传文件
2.需要一个上传函数
①首先需要把上传的文件信息传递到函数中
$file = $_FILES['file']
function uploadFile($file){
}
②需要对上传的文件进行判断
function uploadFile($file,$path,$allowType=array(),$maxSize=0){
// a.需要一个变量接收文件的判断信息
$info = array(
'isok' => false, // 存储上传文件的状态,默认是没有上传成功
'message' => '' // 用于存放文件上传的提示信息,失败时提示错误信息,成功时提示文件名,用于后期添加文件路径到数据库
);
// b.首先要判断文件是否上传成功,通过文件上传信息中的错误号进行判断
if($file['error']>0){ // 如果错误号大于0,表名上传的文件有问题
switch($file['error']){
case 1:
$info['message'] = "文件大小超出PHP的限制"; // 修改错误提示信息
break;
...
...
}
// 判断完错误信息之后,返回给用户看
return $info;
}
// c.如果文件上传没有出错,那么对文件做其它方面的限制
// 限制文件上传的类型,此时需要为函数提供一个参数,用于说明可以上传那些类型的文件
// $allowType = array() // 默认是一个空数组,下面进行默认设置
if(empty($allowType)){ // 如果用户没有指定上传的类型,则使用默认值
$allowType = array('image/jpeg','image/png','image/gif'); // 默认只允许上传图片类型
}
// 验证是否符合类型要求
if(!in_array($file['type'],$allowType)){
// 如果上传的类型不符合要求,则不继续进行上传操作
$info['message'] = '上传类型不符合要求';
return $info;
}
// 接下来需要验证文件大小是否超出限制,所以此时需要指定一个参数用于设置文件大小
// $maxSize = 0 // 默认不限制文件大小
if($maxSize && $file['size']>$maxSize){
// 如果用户设置了文件大小,并且上传的文件超过设置的大小,则上传失败
$info['message'] = '上传的文件超出限制';
return $info;
}
// d.走到这一步说明前面的基本信息验证通过
// 此时需要判断文件是否是通过合法的途径进行上传的
if(is_uploaded_file($file['tmp_name'])){ // 简单的可以理解为服务器上是否存在临时文件
// 接下来就是设置文件上传目录了,需要指定一个上传目录参数,$path
// 对目录进行处理
$path = rtrim($path,'/').'/';
// 获取文件的后缀名
$suffix = pathinfo($file['name'],PATHINFO_EXTENSION);
// 设置随机的文件名,为了防止出现相同的文件名,需要进行一次判断
do{
$randName = date("YmdHis").mt_rand(1000,9999).'.'.$suffix;
}while(file_exists($path.$randName));
// 路径及文件名都设置好之后就可以移动文件了
if(move_uploaded_file($file['tmp_name'],$path.$randName)){
// 文件上传成功
$info['isok'] = true; // 修改文件上传状态标志
$info['message'] = $path.$randName;
return $info;
} else {
// 移动失败
$info['message'] = '文件移动失败';
return $info;
}
} else {
// 不是通过HTTP POST方式提交的文件
$info['error'] = '请使用HTTP POST方式上传文件';
return $info;
}
}
3.点击提交后需要对上传的文件进行处理
①接收上传的文件信息
$file = $_FILES['file'];
②引入上传函数
include('./functions.php');
③设置文件保存路径
$path = './uploads/'; // 此目录需要手动创建
④调用文件上传函数
$info = uploadFile($file,$path);
⑤判断上传状态
if($info['isok']){
echo '上传成功'.$info['message'];
} else {
echo '上传失败'.$info['message'];
}