`

php 文件上传类

阅读更多
<?php
/**
* php 文件上传类
* www.jbxue.com
*/
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);
  }
 }
分享到:
评论

相关推荐

    PHP文件上传类

    以下是对"PHP文件上传类"的详细解析: 1. **类的结构**: - 一个PHP文件上传类通常包含一系列的方法,如`upload()`用于执行实际的文件上传操作,`checkFileSize()`用于检查文件大小,`checkFileType()`用于验证...

    php文件上传类

    然而,在实际项目中,我们通常会创建一个自定义的PHP文件上传类,以实现更灵活、更安全的文件上传管理。 这个"php文件上传类"应该具备以下关键功能和特性: 1. **设置上传限制**:首先,类应允许开发者定义上传...

    比较全面的php文件上传类.zip

    这个"比较全面的php文件上传类"是一个专门处理文件上传的工具,它封装了相关操作,提供了更方便、安全的方式来处理文件上传过程。下面将详细讲解这个类库的核心知识点及其在实际开发中的应用。 首先,类库的设计...

    强大的php文件上传类强大的php文件上传类

    一个强大的PHP文件上传类能够简化这一过程,处理各种安全问题,并提供灵活性来满足不同的项目需求。下面我们将深入探讨PHP文件上传的核心概念以及如何构建或使用这样的强大类。 一、PHP文件上传基础 1. **表单设置...

    php文件上传类--非常实用

    php文件上传类,很简单的实例,是初学php的很好的参考资料

    PHP文件上传类,PHP文件上传类

    这个"PHP文件上传类"就是这样一个工具,它对PHP的文件上传功能进行了封装,使得开发者只需简单设置参数即可实现文件上传。 1. **文件上传基础** - PHP中的文件上传是通过`$_FILES`全局数组来处理的,它包含了关于...

    PHP文件上传类+分页类+验证码类

    1. **PHP文件上传类 (Fileupload.class.php)** 文件上传类主要是为了方便用户在Web端上传文件到服务器。`Fileupload.class.php`可能包含了以下关键功能: - **验证文件类型**:确保上传的文件符合预设的格式,例如...

    php文件上传类(整理)

    本文将深入探讨如何创建一个简单的PHP文件上传类,并了解文件上传过程中的一些关键点。 首先,文件上传表单是用户选择并提交文件的关键组件。在提供的代码中,可以看到一个基本的HTML表单,它使用`POST`方法提交...

    一个经典的PHP文件上传类分享

    总结而言,本文所分享的PHP文件上传类FileUpload通过封装文件上传的功能,提供了一种简洁高效的解决方案,减少了重复编码工作,提高了开发效率。对于初学者而言,使用此类可以快速实现文件上传功能,而对有一定基础...

    PHP文件上传类源码

    PHP文件上传类源码PHP文件上传类源码

    php文件上传类程序代码

    php文件上传类程序代码 public $max_size = '1000000';//设置上传文件大小 public $file_name = 'date';//重命名方式代表以时间命名,其他则使用给予的名称 public $allow_types;//允许上传的文件扩展名,不同...

    一个功能强大的php文件上传类.zip

    这个"一个功能强大的php文件上传类.zip"提供了一个专为处理文件上传而设计的PHP类库,它包含了丰富的功能,可以简化上传过程并解决各种上传过程中可能遇到的问题。 首先,我们来了解一下文件上传的基本流程。当用户...

    php 文件上传类代码

    该PHP文件上传类 (`uploadFile`) 是为了简化文件上传过程而设计的,它提供了一些基本的验证和处理功能。下面是对这个类的详细说明: 1. **类变量**: - `$max_size`:设置允许上传的最大文件大小,默认为1MB...

    php文件上传,自己写的文件上传类,附带一个demo,欢迎大牛们提出意见和建议

    这里提供的资源是一个自定义的PHP文件上传类,该类允许开发者更灵活地控制上传过程中的各种参数,比如文件数量、大小、存储目录以及允许的文件类型。让我们详细探讨一下这个主题。 1. **文件上传原理**: PHP文件...

    PHP文件上传类的设计与应用.pdf

    PHP 文件上传类的设计与应用 PHP 文件上传类的设计与应用是指在 Web 应用程序开发中实现文件上传功能的技术。文件上传是不可缺少的功能,用户可以根据各种需求将文档资料或图像视频等资料上传到 Web 服务器。由于...

Global site tag (gtag.js) - Google Analytics