热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

完整php文件上传类-PHP源码

ec(2);完整php文件上传类classUploadFile{ ** *允许的上传文件类型 *@vararray$allowFileTypes *@accessprivate * private$allowFileTypesarray(jpeg,jpg,gif,

完整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);
}

}

推荐阅读
  • 算法题解析:最短无序连续子数组
    本题探讨如何通过单调栈的方法,找到一个数组中最短的需要排序的连续子数组。通过正向和反向遍历,分别使用单调递增栈和单调递减栈来确定边界索引,从而定位出最小的无序子数组。 ... [详细]
  • 本文深入探讨了线性代数中向量的线性关系,包括线性相关性和极大线性无关组的概念。通过分析线性方程组和向量组的秩,帮助读者理解这些概念在实际问题中的应用。 ... [详细]
  • 本文介绍如何在 C++ 中使用链表结构存储和管理数据。通过具体示例,展示了静态链表的基本操作,包括节点的创建、链接及遍历。 ... [详细]
  • 本文旨在提供一套高效的面试方法,帮助企业在短时间内找到合适的产品经理。虽然观点较为直接,但其方法已被实践证明有效,尤其适用于初创公司和新项目的需求。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 在跨浏览器开发中,一个常见的问题是关于如何在鼠标悬停时显示图片提示信息。本文深入探讨了 IE 浏览器对 IMG 元素 alt 属性的特殊处理,并提供了最佳实践建议。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 解决Anaconda安装TensorFlow时遇到的TensorBoard版本问题
    本文介绍了在使用Anaconda安装TensorFlow时遇到的“Could not find a version that satisfies the requirement tensorboard”错误,并提供详细的解决方案,包括创建虚拟环境和配置PyCharm项目。 ... [详细]
  • 如何将本地Docker镜像推送到阿里云容器镜像服务
    本文详细介绍将本地Docker镜像上传至阿里云容器镜像服务的步骤,包括登录、查看镜像列表、推送镜像以及确认上传结果。通过本文,您将掌握如何高效地管理Docker镜像并将其存储在阿里云的镜像仓库中。 ... [详细]
  • 查找最小值的操作是很简单的,只需要从根节点递归的遍历到左子树节点即可。当遍历到节点的左孩子为NULL时,则这个节点就是树的最小值。上面的树中,从根节点20开始,递归遍历左子 ... [详细]
  • 本文由杨勇和思远于2012年12月27日撰写,主要探讨了如何使用PHP进行网页内容抓取,特别是针对字符较多的网站。文章详细介绍了正则表达式失效的原因,并提供了优化方法,同时展示了如何抓取淘宝服饰栏、天气信息以及IP地址对应的地理位置。 ... [详细]
  • 在使用STM32Cube进行定时器配置时,有时会遇到延时不准的问题。本文探讨了可能导致延时不准确的原因,并提供了解决方法和预防措施。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
author-avatar
Cyndi_lidi_816
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有