<?php
//文件:文件上传类
//用途:文件上传
//作者:穆红伟
//时间:2009.08.24
class mupload
{
public $upfile;
public $result; //存储返回结果的数组
public $dir; //文件目录
public $thumb; //是否生成缩略图 1 为生成 0为不生成
public $thumb_w; //缩略图宽度 
public $thumb_h; //缩略图高度
public $ftype=array('.jpg','.jpeg','.gif','.png','.rar'); //允许上传类型
public $maxsize=512000; //最大上传限制500k
public $name; //重新生成的文件名
public $fixname; //文件类型function __construct($args) //构造函数,进行一些合法性检查
{
   $this->upfile=$_FILES[$args];
   (!isset($_FILES) || !is_uploaded_file($_FILES[$args]['tmp_name'])) && $this->halt($_FILES[$args]['name'].'非法上传');
   !in_array(strtolower(strrchr($_FILES[$args]['name'],'.')),$this->ftype) && $this->halt('只允许上传'.implode(',',$this->ftype).'等类型文件');
   $_FILE[$args]['size']>$this->maxsize && $this->halt('上传最大允许'.round($this->maxsize/1024/1024,2).'M');
   $this->thumb=0;
   $this->thumb_w=0;
   $this->thumb_h=0;
   $this->fixname=strtolower(strrchr($_FILES[$args]['name'],'.'));
   $this->name=date('YmdHis').'_'.mt_rand(100,999).strtolower(strrchr($_FILES[$args]['name'],'.'));
  
} function setWH($flag=1,$w=168,$h=68) //设置是否生成缩略图,宽度,高度
{
   $this->thumb=$flag;
   $this->thumb_w=$w;
   $this->thumb_h=$h;
}function setDIR($dir) //目录创建
{
   $dir=preg_replace('/[^0-9a-zA-Z_]+/','',$dir);
   $root=$_SERVER['DOCUMENT_ROOT'];
   $dir=$root.'/'.$dir;
   !is_writeable($root) && halt('目录'.$root.'不可写!');
   @mkdir($dir,0777);
   $this->dir=$dir;
}function upload() //上传
{
   if(!move_uploaded_file($this->upfile['tmp_name'],$this->dir.'/'.$this->name))
   { 
    copy($this->upfile['tmp_name'],$this->dir.'/'.$this->name);
    $this->result['name']=strrchr($this->dir,'/').'/'.$this->name;
   }
   if($this->thumb)
   {
    if(function_exists(imagecreate)) //支持GD库,生成缩略图
    {
     switch($this->fixname)
     {
      case '.gif':
       $im=imagecreatefromgif($this->dir.'/'.$this->name);
       break;
      case '.png':
       $im=imagecreatefrompng($this->dir.'/'.$this->name);
       break;
      case '.jpg':
       $im=imagecreatefromjpeg($this->dir.'/'.$this->name);
       break;
      case '.jpeg':
       $im=imagecreatefromjpeg($this->dir.'/'.$this->name);
       break;    
     }
     //imagecreatetruecolor()函数不能用于.GIF文件
     $newim=$this->fixname=='.gif'?imagecreate($this->thumb_w,$this->thumb_h):imagecreatetruecolor($this->thumb_w,$this->thumb_h);
     imagecopyresampled($newim,$im,0,0,0,0,$this->thumb_w,$this->thumb_h,imagesx($im),imagesy($im));
    
     switch($this->fixname)
     {
      case '.gif':
       imagegif($newim,$this->dir.'/thumb_'.$this->name);
       break;
      case '.png':
       imagepng($newim,$this->dir.'/thumb_'.$this->name);
       break;
      case '.jpeg':
       imagejpeg($newim,$this->dir.'/thumb_'.$this->name);
       break;
      case '.jpg':
       imagejpeg($newim,$this->dir.'/thumb_'.$this->name);
       break; 
     }
     imagedestroy($im);
     imagedestroy($newim);
    }
    else //不支持GD库,直接copy
    {
     @copy($this->dir.'/'.$this->name,$this->dir.'/thumb_'.$this->name);
    }
    $this->result['thumb']=strrchr($this->dir,'/').'/thumb_'.$this->name;
   }
   return $this->result;
}function halt($msg) //错误输出函数
   {
   exit('<script language="javascript" type="text/javascript">{alert("'.$msg.'");history.back()}</script>');
}
}
/*用法:    $upload=new mupload('filename');
     $upload->setWH(1,$w,$h);
     $upload->setDIR('mmimage');
     $content=$upload->upload();
     $url=$content['thumb'];
     $this->db->insert($this->table,$value);*/
?>