您的位置:首页 > 其它

自己编写的久经考验的文件上传类,可以直接使用

2013-09-15 19:14 295 查看
<?php
defined('ACC')||exit('你没有访问权限');

/*一个上传类需要的知识点
1.判断允许上传的后缀名
2.判断允许上传的最大限制
3.创建目录
4.创建随机文件名
5.上传

*/
class upTool{
protected $allowExt='jpg,png,jpeg';
protected $maxSize=1;
protected $errno = 0; // 错误代码
protected $error = array(
0=>'无错',
1=>'上传文件超出系统限制',
2=>'上传文件大小超出网页表单页面',
3=>'文件只有部分被上传',
4=>'没有文件被上传',
6=>'找不到临时文件夹',
7=>'文件写入失败',
8=>'不允许的文件后缀',
9=>'文件大小超出的类的允许范围',
10=>'创建目录失败',
11=>'移动失败'

);

//根据后面的一系列方法开始上传
public function upload($key){
//1,先判断是否存在上传文件
if(!isset($_FILES[$key])){
return false;
}
//2.如果有的话,接下来判断是否上传成功

$f=$_FILES[$key];
if($f['error']){
$this->errno=$f['error'];
return false;
}

//3.判断文件后缀是否是允许的
$ext=$this->getExt($f['name']);
if(!$this->isAllowExt($ext)){
$this->errno=8;
return false;
}
//4.判断上传大小
if(!$this->isAllowSize($f['size'])){
$this->errno=9;
return false;
}
//5.判断完毕后,开始创建路径
if(!($dir=$this->mk_dir())){
$this->errno=10;
return false;
}
$path=$dir.$this->randName().'.'.$ext;

//6.将上传文件移动到制定的路径中
if(!move_uploaded_file($f['tmp_name'],$path)){
$this->errno=11;
return false;
}
return str_replace(ROOT,'',$path);
}

//获取错误信息
public function getErr(){
return $this->error[$this->errno];
}

//获取上传文件的后缀名
protected function getExt($file){
$ext=explode('.',$file);
return end($ext);
}

//判断是否是允许的文件后缀名
protected function isAllowExt($ext){
$arr=explode(',',strtolower($this->allowExt));
return in_array(strtolower($ext),$arr);

}

//判断是否是允许上传的大小
protected function isAllowSize($size){

return $size<=$this->maxSize*1024*1024;
}

//获取随机的文件名
protected function randName($length=6){
$str='abcdefghigklmnopqrstuvwxyz0123456789';
return substr(str_shuffle($str),0,$length);

}

//创建存贮路径
protected function mk_dir(){
$dir=ROOT.'data/images/'.date('ym/d/',time());
if(is_dir($dir)||mkdir($dir,0777,true)){
return $dir;
}
}

//设置允许的文件后缀
public function setExt($ext){
return $this->allowExt=$ext;
}
//设置文件上传的最大值
public function setMax($max){
return $this->maxSize=$max;
}
}
?>


这是我自己写的一个文件上传类,先在上传之前写几个上传需要的方法。然后一步一步的调用方法,实现文件上传并且处理的功能。功能强大,步骤清晰,思路严谨。该工具类久经考验,可以直接拿来使用。同时,也可以用来学习用,可以帮助您进一步理解面向对象编程的魅力之所在。接下来我将该工具类分享给大家。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐