设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP5 UTF8多文件上传类

发布时间:2022-03-30 12:44 所属栏目:121 来源:互联网
导读:根据需要写了个PHP5 UTF8环境的文件上传类,支持多文件上传,并对常用文件的类型进行MIME检测. 还有些功能没有加上去,如自动更名,图片处理等.可根据需要自己添加. USE: $up = new upfile(ROOT_PATH.data/.date(Ym,time()),array(gif,jpg,jpeg),true); $fileimg
  根据需要写了个PHP5 UTF8环境的文件上传类,支持多文件上传,并对常用文件的类型进行MIME检测.
 
  还有些功能没有加上去,如自动更名,图片处理等.可根据需要自己添加.
 
  USE:
 
  $up = new upfile(ROOT_PATH.'data/'.date("Ym",time()),array('gif','jpg','jpeg'),true);
  $fileimg = $up->upload($_FILES['img']);//返回上传后文件名数组,$_FILES['img']为上传的文件
  可使用$up->log查看上传时信息.
 
  <?php
  //====================================================
  // FileName: upfile.class.php
  // Summary: 文件上传类
  // Author: millken(迷路林肯)
  // LastModifed: 2008-6-4
  // copyright (c)2008 millken@gmail.com
  //====================================================
  if(!defined('OK'))exit(__FILE__.'Access Denied');
  class upfile {
  public $ExtensionFileFormat = array();
  public $returninfo = array();
 
  private $ImageFileFormat = array('gif','bmp','jpg','jpe','jpeg','png');
  private $OtherFileFormat = array('zip','pdf','rar','xls','doc','ppt','csv');
  private $savePath;
  private $attachment_path = './upfiles/';
  private $overwrite = false; # 同名时是否覆盖
  private $maxSize = 0; # 文件最大字节,为0时不限制大小
  private $ext;
  private $errno = 0;
 
  /* 构造函数
  * (string)$savePath 文件保存路径,默认为$attachment_path
  * (array)$extensionFileFormat 自定义上传文件的扩展名,未设置时为$ImageFileFormat || $OtherFileFormat
  * (bool)$overwrite 是否覆盖同名文件
  */
  public function __construct($savePath='',$extensionFileFormat = array(),$overwrite = false) {
  $this->savePath = empty($savePath)?$this->attachment_pathsavePath.'/';
  $this->extensionFileFormat = is_array($extensionFileFormat)?$extensionFileFormat:array();
  $this->overwrite = is_bool($overwrite)?$overwrite:false;
  }
 
  /*上传函数
  * (array)$files 待上传的文件数组$_FILES['attach']
  * (number)$maxSize 文件的最大字节数,默认为0不限制上传大小
  */
  public function upload($files,$maxSize=0) {
  $this->maxSize = is_numeric($maxSize)?$maxSize:0;
  if(isset($files) && is_array($files)) {
  if(is_array($files['name'])) {
  foreach($files as $key => $var) {
  foreach($var as $id => $val) {
  $attachments[$id][$key] = $val;
  }
  }
  } else {
  $attachments[] = $files;
  }
  }
  self::check_file_type($attachments);
  if(empty($this->filelist)) {
  $this->log .= "待上传的文件列表为空。/n";
  return array();
  }
  if(!self::makeDirectory() || !@is_writable($this->savePath)) {
  $this->log .= $this->savePath . "不能创建或其权限为不可写。/n";
  return array();
  }
  $filearray = array();
  foreach($this->filelist as $k=>$f) {
  if($this->maxSize && $f['size']>$this->maxSize) {
  $this->log .= $f['name'] . "其大小超过了设定的值:" . $this->maxSize ."/n";
  }elseif($this->overwrite == false && file_exists($this->savePath . $f['name'])) {
  $this->log .= $f['name'] . "已经存在于目录:" . $this->savePath . "/n";
  }else{
  @unlink($this->savePath . $f['name']);
  if(@move_uploaded_file($f['tmp_name'],$this->savePath . mb_convert_encoding($f['name'],'gbk','utf-8'))) {//如果不进行编码转换,中文将无法支持
  $this->log .= $f['name'] . "成功上传到目录:". $this->savePath ."/n";
  $filearray[$k] = $this->savePath . $f['name'];
  }else{
  $this->log .= $f['name'] . "上传失败。/n";
  }
  }
  }
  return $filearray;
  }
 
  /*检测文件的类型
  *(array)$files 文件数组
  */
  private function check_file_type($files) {
  $this->filelist = array();
  foreach($files as $key=>$file) {
  if($file['error'] == 0) {
  $ext = strtolower(substr($file['name'], strrpos($file['name'], '.') 1));
  $str = @file_get_contents($file['tmp_name'],FALSE,NULL,0,20);
  if((in_array($ext,array('jpg','jpeg')) && substr($str ,0, 3) !== "/xFF/xD8/xFF") || ($ext == 'gif' && substr($str ,0, 4) !== 'GIF8') || ($ext == 'png' && substr($str ,0, 8) !== "/x89/x50/x4E/x47/x0D/x0A/x1A/x0A") || ($ext == 'bmp' && substr($str ,0, 2) !== 'BM') || ($ext == 'swf' && (substr($str ,0, 3) !== 'CWS' || substr($str ,0, 3) !== 'FWS')) || ($ext == 'zip' && substr($str ,0, 4) !== "PK/x03/x04") || ($ext == 'rar' && substr($str ,0, 4) !== 'Rar!') || ($ext == 'pdf' && substr($str ,0, 4) !== "/x25PDF") || ($ext == 'chm' && substr($str ,0, 4) !== 'ITSF') || ($ext == 'rm' && substr($str ,0, 4) !== "/x2ERMF") || ($ext == 'exe' && substr($str ,0, 2) !== "MZ") || (in_array($ext,array('doc','xls','ppt')) && substr($str ,0, 4) !== "/xD0/xCF/x11/xE0")) {
  $this->log .= $file['name'] . "文件类型与文件内容不符合。/n";
  }elseif((!empty($this->extensionFileFormat) && in_array($ext,$this->extensionFileFormat)) || (empty($this->extensionFileFormat) && (in_array($ext,$this->ImageFileFormat) || in_array($ext,$this->OtherFileFormat)))) {
  $this->filelist[$key] = $file;
  }else{
  $this->log .= $file['name'] . "不符合上传文件的类型。/n";
  @unlink($file['tmp_name']);
  }
  }
  }
  }
 
  /*生成上传目录
  *
  */
  private function makeDirectory() {
  $directoryName = str_replace("//","/", $this->savePath);
  $dirNames = explode('/', $directoryName);
  $total = count($dirNames);
  $temp = '';
  for($i=0; $i<$total; $i )
  {
  $temp .= $dirNames[$i].'/';
  if (!is_dir($temp))
  {
  $oldmask = @umask(0);
  if (!@mkdir($temp, 0777)) return false;
  @umask($oldmask);
  }
  };
  if(is_dir($this->savePath)) {
  return true;
  } else {
  return false;
  };
  }
  }
 
  ?>

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读