php上传文件类
2021-06-19 21:03
标签:get return his one class load move 类型信息 const php上传文件类 标签:get return his one class load move 类型信息 const 原文地址:http://www.cnblogs.com/huodaihao/p/7191199.htmlphp
class Upload {
private $_max_size;
private $_type_map;
private $_allow_ext_list;
private $_allow_mime_list;
private $_upload_path;
private $_prefix;
private $_error;//当前的错误信息
public function getError() {
return $this->_error;
}
public function __construct() {
$this->_max_size = 1024*1024;
$this->_type_map = array(
‘.png‘ => array(‘image/png‘, ‘image/x-png‘),
‘.jpg‘ => array(‘image/jpeg‘, ‘image/pjpeg‘),
‘.jpeg‘ => array(‘image/jpeg‘, ‘image/pjpeg‘),
‘.gif‘ => array(‘image/gif‘),
);
$this->_allow_ext_list = array(‘.png‘, ‘.jpg‘);
$allow_mime_list = array();
foreach($this->_allow_ext_list as $value) {
//得到每个后缀名
$allow_mime_list = array_merge($allow_mime_list, $this->_type_map[$value]);
}
// 去重
$this->_allow_mime_list = array_unique($allow_mime_list);
$this->_upload_path = ‘./‘;
$this->_prefix = ‘‘;
}
public function __set($p, $v) {//属性重载
$allow_set_list = array(‘_upload_path‘, ‘_prefix‘, ‘_allow_ext_list‘, ‘_max_size‘);
//可以不加:_ 进行设置
if(substr($p, 0, 1) !== ‘_‘) {
$p = ‘_‘ . $p;
}
$this->$p = $v;
}
/**
* 上传单个文件
*/
public function uploadOne($tmp_file) {
# 是否存在错误
if($tmp_file[‘error‘] != 0) {
$this->_error = ‘文件上传错误‘;
return false;
}
# 尺寸
if ($tmp_file[‘size‘] > $this->_max_size) {
$this->_error = ‘文件过大‘;
return false;
}
# 类型
# 保证修改允许的后缀名,就可以影响到$allow_ext_list和$allow_mime_list
# 设置一个后缀名与mime的映射关系
# 后缀,从原始文件名中提取
$ext = strtolower(strrchr($tmp_file[‘name‘], ‘.‘));
if (!in_array($ext, $this->_allow_ext_list)) {
$this->_error = ‘类型不合法‘;
return false;
}
# MIME, type元素。
// $allow_mime_list = array(‘image/png‘, ‘image/gif‘, ‘image/jpeg‘, ‘image/pjpeg‘, ‘image/x-png‘);
if (!in_array($tmp_file[‘type‘], $this->_allow_mime_list)) {
$this->_error = ‘类型不合法‘;
return false;
}
//PHP自己获取文件的mime,进行检测
$finfo = new Finfo(FILEINFO_MIME_TYPE);//获得一个可以检测文件MIME类型信息的对象
$mime_type = $finfo->file($tmp_file[‘tmp_name‘]);//检测
if (!in_array($mime_type, $this->_allow_mime_list)) {
$this->_error = ‘类型不合法‘;
return false;
}
# 移动
# 上传文件存储地址
//创建子目录
$subdir = date(‘YmdH‘) . ‘/‘;
if(!is_dir($this->_upload_path . $subdir)) {//检测是否存在
//不存在
mkdir($this->_upload_path . $subdir);
}
# 科学起名
$upload_filename = uniqID($this->_prefix, true) . $ext;
if (move_uploaded_file($tmp_file[‘tmp_name‘], $this->_upload_path . $subdir . $upload_filename)) {
// 移动成功,返回文件名
return $subdir . $upload_filename;
} else {
// 移动失败
$this->_error = ‘移动失败‘;
return false;
}
}
}