<?php
namespace Lib;
class Upload{
private $path; //上传的路径
private $size; //上传的大小
private $type; //允许上传的类型
private $error; //保存错误信息
public function __construct($path,$size,$type) {
$this->path=$path;
$this->size=$size;
$this->type=$type;
}
//返回错误信息
public function getError(){
return $this->error;
}
/*
* 文件上传
* @param $files array $_FILES[]
* @return bool|string 成功返回文件路径,失败返回false
*/
public function uploadOne($files){
if($this->checkError($files)){ //没有错误就上传
$foldername=date('Y-m-d'); //文件夹名称
$folderpath= $this->path.$foldername; //文件夹路径
if(!is_dir($folderpath))
mkdir($folderpath);
$filename=uniqid('',true).strrchr($files['name'],'.');//文件名
$filepath="$folderpath/$filename"; //文件路径
if(move_uploaded_file($files['tmp_name'],$filepath))
return "{$foldername}/{$filename}";
else{
$this->error='上传失败<br>';
return false;
}
}
return false;
}
//验证上传是否有误
private function checkError($files){
//1、验证错误号
if($files['error']!=0){
switch($files['error']) {
case 1:
$this->error='文件大小超过了php.ini中允许的最大值,最大值是:'.ini_get('upload_max_filesize');
return false;
case 2:
$this->error='文件大小超过了表单允许的最大值';
return false;
case 3:
$this->error='只有部分文件上传';
return false;
case 4:
$this->error='没有文件上传';
return false;
case 6:
$this->error='找不到临时文件';
return false;
case 7:
$this->error='文件写入失败';
return false;
default:
$this->error= '未知错误';
return false;
}
}
//2、验证格式
$info=finfo_open(FILEINFO_MIME_TYPE);
$mime=finfo_file($info,$files['tmp_name']);
if(!in_array($mime, $this->type)){
$this->error='只能上传'.implode(',', $this->type).'格式';
return false;
}
//3、验证大小
if($files['size']> $this->size){
$this->error='文件大小不能超过'.number_format($this->size/1024,1).'K';
return false;
}
//4、验证是否是http上传
if(!is_uploaded_file($files['tmp_name'])){
$this->error='文件不是HTTP POST上传的<br>';
return false;
}
return true;
}
}
配置文件
return array(
'app'=>array(
'path'=>'./uploads/',
'size'=>'123456789',
'type'=>['image/png','image/jpeg','image/gif'],
'key' => 'itcast',//加密密钥
'dp' => 'Admin',//默认平台
'dc' => 'Products', //默认控制器
'da' => 'list' //默认方法
)
);
$GLOBALS['config'] =require 'config.php';
$path=$GLOBALS['config']['app']['path'];
$size=$GLOBALS['config']['app']['size'];
$type=$GLOBALS['config']['app']['type'];
$upload=new \Lib\Upload($path,$size,$type);
$filepath=$upload->uploadOne($_FILES['face']);
if($filepath){
//生成缩略图
$data['user_face']=$filepath;
}else{
$this->error('0503.php?p=admin&c=Login&a=register',$upload->getError(),3);
}
<form action="" method="post" enctype="multipart/form-data">
<div class="form-group">
<div class="field field-icon-right">
<input type="file" class="input" name="face" placeholder="请输入头像">
</div>
</div>
<form>