您好,欢迎访问一九零五行业门户网

完整php 文件上传类

完整php 文件上传类
class uploadfile {
 /**
  * 允许的上传文件类型
  * @var array $allowfiletypes
  * @access private
  */
 private $allowfiletypes = array('jpeg','jpg','gif','bmp','png');
 /**
  * 允许的上传文件大小,单位字节
  * @var int $maxfilesize
  * @access public
  */
 public $maxfilesize = 8388608;
 /**
  * 构造函数
  */
 public function __construct() {
 }
 /**
  * 设置允许的文件类型
  * @param mixed $filetypes 文件类型列表可以是数组和字符串,用“,”号隔开
  * @return void
  * @access public
  */
 public function setallowfiletype($filetypes) {
  if (!is_array($filetypes)) {
   $this->allowfiletypes = explode(',', $filetypes);
  } else {
   $this->allowfiletypes = $filetypes;
  }
  return;
 }
 /**
  * 上传文件
  * @param string $filefield  要上传的文件如$_files['file']
  * @param string $destfolder 上传的目录,会自动建立
  * @param string $filetypes   上传后文件命名方式0使用原文件名1使用当前时间戳作为文件名
  * @return int
  * @access public
  */
 public function upload($filefield, $destfolder = './', $filenametype = 1) {
  switch ($filefield['error']) {
   case upload_err_ok : //其值为 0,没有错误发生,文件上传成功。
   $upload_succeed = true;
   break;
   case upload_err_ini_size : //其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
   case upload_err_form_size : //其值为 2,上传文件的大小超过了 html 表单中 max_file_size 选项指定的值。
   $errormsg = '文件上传失败!失败原因:文件大小超出限制!';
   $errorcode = -103;
   $upload_succeed = false;
   break;
   case upload_err_partial : //值:3; 文件只有部分被上传。
   $errormsg = '文件上传失败!失败原因:文件只有部分被上传!';
   $errorcode = -101;
   $upload_succeed = false;
   break;
   case upload_err_no_file : //值:4; 没有文件被上传。
   $errormsg = '文件上传失败!失败原因:没有文件被上传!';
   $errorcode = -102;
   $upload_succeed = false;
   break;
   case upload_err_no_tmp_dir : //其值为 6,找不到临时文件夹。php 4.3.10 和 php 5.0.3 引进。
   $errormsg = '文件上传失败!失败原因:找不到临时文件夹!';
   $errorcode = -102;
   $upload_succeed = false;
   break;
   case upload_err_cant_write : //其值为 7,文件写入失败。php 5.1.0 引进。
   $errormsg = '文件上传失败!失败原因:文件写入失败!';
   $errorcode = -102;
   $upload_succeed = false;
   break;
   default : //其它错误
   $errormsg = '文件上传失败!失败原因:其它!';
   $errorcode = -100;
   $upload_succeed = false;
   break;
  }
  if ($upload_succeed) {
   if ($filefield['size']>$this->maxfilesize) {
    $errormsg = '文件上传失败!失败原因:文件大小超出限制!';
    $errorcode = -103;
    $upload_succeed = false;
   }
   if ($upload_succeed) {
    $fileext = filesystem::fileext($filefield['name']);
    if (!in_array(strtolower($fileext),$this->allowfiletypes)) {
     $errormsg = '文件上传失败!失败原因:文件类型不被允许!';
     $errorcode = -104;
     $upload_succeed = false;
    }
   }
  }
  if ($upload_succeed) {
   if (!is_dir($destfolder) && $destfolder!='./' && $destfolder!='../') {
    $dirname = '';
    $folders = explode('/',$destfolder);
    foreach ($folders as $folder) {
     $dirname .= $folder . '/';
     if ($folder!='' && $folder!='.' && $folder!='..' && !is_dir($dirname)) {
      mkdir($dirname);
     }
    }
    chmod($destfolder,0777);
   }
   switch ($filenametype) {
    case 1:
     $filename = date('ymdhis');
     $dot = '.';
     $filefullname = $filename . $dot . $fileext;
     $i = 0;
     //判断是否有重名文件
     while (is_file($destfolder . $filefullname)) {
      $filefullname = $filename . $i++ . $dot . $fileext;
     }
     break;
    case 2:
     $filefullname = date('ymdhis');
     $i = 0;
     //判断是否有重名文件
     while (is_file($destfolder . $filefullname)) {
      $filefullname = $filefullname . $i++;
     }
     break;
    default:
     $filefullname = $filefield['name'];
     break;
   }
   //die($destfolder . $filefullname);
   $tempfile = str_replace('\\','\',$filefield['tmp_name']);
   //$files =
   if (move_uploaded_file($tempfile, $destfolder . $filefullname)) {
    return $filefullname;
   } else {
    $errormsg = $destfolder.$filefullname. 文件上传失败!失败原因:本地文件系统读写权限出错!;
    $errorcode = -105;
    $upload_succeed = false;
   }
  }
  if (!$upload_succeed) {
   throw new exception($errormsg,$errorcode);
  }
 }
其它类似信息

推荐信息