发新话题
打印

文件上传类

文件上传类

文件上传类
复制内容到剪贴板
代码:
<?php
/**
* @author 随风
* 参数说明tmpUpFile=》上传的文件名(此处,可以使用$_FILES['myFile']['name']来代替)
* $nameMode=》上传的文件(此处,可以使用$_FILES['myFile']['tmp_ame']来代替
* $upLoadMode=》文件上传模式(1为使用原文件的名称,有可能因为相同文件名已经存在而导致上传失败;0为使用系统命名方式,不会出现已经存在相同文件名的情况)
* $allowFileType=》允许上传的文件类型后缀组成的字符串,如"gifjpgpng"
* $maxFileSize=》允许上传的文件的最大大小,单位k
*/
class upLoad{
  private $upFileName,$tmpUpFile,$nameMode,$allowFileType,$maxFileSize;
  public $newFileName;
  function __construct($upFile,$tmpUpFile,$upLoadMode){
   $this->upFileName=$upFile;
   $this->tmpUpFile=$tmpUpFile;
   $this->nameMode=$upLoadMode;
  }
  
  public function setAllowType($typeString){                         //指定允许上传的文件格式
   $this->allowFileType=strtolower($typeString);
  }
  
  public function setUploadDir($dir){
   if(substr($dir,strlen($dir)-1,1)!="/"){       //如果目录最后一个字符不是"/",则自动添加一个"/"
    $this->uploadDir = $dir."/";
   }else{
    $this->uploadDir = $dir;
   }
   if (!is_dir($this->uploadDir)){
    mkdir($this->uploadDir);         //如果目录不存在,则创建目录
   }
  }
  
  public function getFileType(){                                      //获取文件类型
   $info=explode(".",$this->upFileName);
   $id=sizeof($info)-1;           //获取最后一个点号之后的字符串(文件格式)
   return $info[$id];
  }
  
  public function setMaxFileSize($size){
   $this->maxFileSize = 1024*$size;        //$size单位是k,先要转换成字节
  }
  
  private function checkFileType(){          //检查是否是允许上传的文件格式
   return !stristr($this->allowFileType,$this->getFileType())?false:true;
  }
  
  private function checkFileSize(){           //检查文件大小是否超出限制
   return filesize($this->tmpUpFile) <= $this->maxFileSize?true:false;
  }
  
  private function makeNewFileName(){           //生成新文件名
   if($this->nameMode==1){
    $this->newFileName = $this->uploadDir.date("YmdHis").".".$this->getfileType();   //按照时间重新命名            
   }else{
    $this->newFileName = $this->uploadDir.$this->upFileName;    //使用原文件名
   }
  }
  
  public function saveFile(){                                             //保存文件
   $err = array(
     "exist" => "<font font-size=\"12\" font-color=\"red\">已经存在相同的文件名,请改名后<a href=\"{$_SERVER['PHP_SELF']}\">再上传</a></font>",
     "sizeErr" => "<font font-size=\"12\" font-color=\"red\">文件大小超过系统设置,请确认后<a href=\"{$_SERVER['PHP_SELF']}\">再上传</a></font>",
     "notAllowed" => "<font font-size=\"12\" font-color=\"red\">不允许上传此类型文件,请确认后<a href=\"{$_SERVER['PHP_SELF']}\">再上传</a></font>"
   );
   $this->makeNewFileName();
   if(file_exists($this->newFileName)){
    echo $err['exist'];
    return false;
   }
   
   if(!$this->checkFileSize()){
    echo $err['sizeErr'];
    return false;
   }
   
   if(!$this->checkFileType()){
    echo $err['notAllowed'];
    return false;
   }
   move_uploaded_file($this->tmpUpFile,$this->newFileName);
   @unlink($this->tmpUpFile);
   return file_exists($this->newFileName)?true:false;
  }
}
?>
调用方式:
  $uploadDir = "../upLoad/";
  $typeFilter = "gifjpgpngbmp";
  $maxSize = 1024;       //允许上传1M的文件
  $upload = new upLoad($_FILES['upFile']['name'],$_FILES['upFile']['tmp_name'],1);
  $upload->setAllowType($typeFilter);
  $upload->setMaxFileSize($maxSize);
  $upload->setUploadDir($uploadDir);
  if($upload->saveFile()){
   echo "图片上传成功,点击<a href=\"upLoad.php\">这里重新上传</a>";
  }
}

[ 本帖最后由 随风 于 2008-3-28 09:00 编辑 ]
附件: 您所在的用户组无法下载或查看附件
本帖最近评分记录
  • Mars 虚拟币 +5 2008-3-3 15:47
//爱一个人就是在拔通电话时,忽然不知道说什么好,原来只是想听听那熟悉的声音,原来真正想拔动的只是自已心底深处的一根弦

TOP

占位
////////////////////////////////////////
广告位出租
////////////////////////////
努力,努力,再努力

TOP

广告位 5折优惠
声誉好得令人发指,人格闪亮得让人嫉妒!

TOP

private function checkFileType(){          //检查是否是允许上传的文件格式
   return !stristr($this->allowFileType,$this->getFileType())?false:true;
}
这个函数还不是很严谨。要是严谨的话可以像下面那样写
private function checkFileType(){          //检查是否是允许上传的文件格式
     $typeFilter = explode(",",$this->allowFileType);
          for($i = 0;$i<sizeof($typeFilter);$i++){
              if(strtolower($this->getFileType()) == strtolower($typeFilter[$i])) return true;                  //转换成小写并进行比较
         }
}
     return false;
}
此时,传入的允许上传类型应该用,分开,比如:jpg,gif,png这样

[ 本帖最后由 随风 于 2008-3-3 18:40 编辑 ]
//爱一个人就是在拔通电话时,忽然不知道说什么好,原来只是想听听那熟悉的声音,原来真正想拔动的只是自已心底深处的一根弦

TOP

好东西啊
  我爱你,不是因为你是一个怎样的人,而是因为我喜欢与你在一起时的感觉。
+++++++++++++++++++++++++++++++++++
    没有人值得你流泪,值得让你这么做的人不会让你哭泣。

TOP

不错不错,又减少了我的麻烦,以后我就用这个了。
不过建议随风以后写这个的时候多检查几次哈。感觉总会出现一些小错误。

TOP

    学习中,谢谢了,顶

TOP

发新话题