某天想整理个简洁好用的上传类,所以自己搜索了下看到代码都n多,看的我头大。所以索性自己写了个。
看代码,用法在后边,也可上传flash:
小技巧:判断是否是图片可直接用getimagesize判断,因若不是图片此函数会返回false
功能:上传一张或多张图片,或上传flash,并且记入上传图片到数据库
返回:返回数组包括 标识,相对路径和绝对路径
<?
/**
* @author bobboy007@gmail.com
*jyw
*/
class uploadfile{
var $uploaddir='';
var $webroot = '';
/**
* 设置上传目录最后带 '/'
* @param $webroot
* @param $dirpath
* @return void
*/
function setuploaddir($webroot,$dirpath){
$this->webroot = $webroot;
$path =$this->webroot.$dirpath .date("Ym")."/";
is_dir($path) || $this->make_dir($path);
$this->uploaddir = $path;
}
/**
* 上传一张图片,type=1是图片,否则flash,返回array(1,相对路径,全路径)
* @param $filearr
* @param $type
* @return array
*/
function uploadimg($filearr,$type=1){
if($type==1){//图片
$imginfo = getimagesize($filearr["tmp_name"]);
if(!$imginfo) return array(-1,'imagetype error');
}else{
$swfmime = 'application/x-shockwave-flash';
if($swfmine != $filearr['type'])return array(-1,'swftype error');
}
$extname = strtolower(pathinfo($filearr["name"], PATHINFO_EXTENSION)); //扩展名
$newfilename = $this->getfilename();
$fullpath = $this->uploaddir."$newfilename.$extname";
if(!move_uploaded_file($filearr["tmp_name"], $fullpath))return array(-2,'move tmp error');
$imgpath = str_replace($this->webroot, '', $fullpath);
$this->writeimglog($imginfo[0],$imginfo[1],$imgpath);//写入日志
return array(1,$imgpath,$fullpath);
}
/**
* 上传多张图片
* @param $filearr
* @param $type
* @return array
*/
function uploadmoreimg($filearr,$type=1){
$rarr = array();
for($i=0;$i<count($filearr['name']);$i++){
$farr = array(
'name'=>$filearr['name'][$i],
'type'=>$filearr['type'][$i],
'tmp_name'=>$filearr['tmp_name'][$i],
'error'=>$filearr['error'][$i],
'size'=>$filearr['size'][$i]
);
$rarr[] = $this->uploadimg($farr,$type);
}
return $rarr;
}
/**
* 返回随机文件名
* @return string
*/
function getfilename(){
return strftime("%H%M%S", time()) . mt_rand(1000, 9999);
}
/**
* 写入图片日志到数据库
* @param $width
* @param $height
* @param $uploadpath
* @return void
*/
function writeimglog($width,$height,$uploadpath){
global $_SGLOBAL;
$inarr = array(
'username'=>$_SGLOBAL['super_username'],
'uploadtime'=>time(),
'imgwh'=>$width.'*'.$height,
'uploadpath'=>$uploadpath
);
inserttable('imagelog',$inarr);
}
/**
* 创建文件夹,需要全路径
* @param $dir
* @param $mode
* @return void
*/
function make_dir($dir, $mode = 0777){
if (is_dir($dir) || @mkdir($dir, $mode)) return true;
if (!$this->make_dir(dirname($dir), $mode)) return false;
return @mkdir($dir, $mode);
}
}
/*
$obj_img = new uploadfile();
$obj_img->setuploaddir(WEB_ROOT,'uploadpic/');
$file = $obj_img->uploadmoreimg($_FILES["fileup"]);
print_r($file);
*/
?>