class Upload{ // 上传文件的最大值 public $maxSize = -1; // 允许上传的文件后缀 // 留空不作后缀检查 public $allowExts = array(); // 使用对上传图片进行缩略图处理 public $thumb = false; // 缩略图最大宽度 public $thumbMaxWidth=20; // 缩略图最大高度 public $thumbMaxHeight=20; // 错误信息 public $error = ''; // 上传成功的文件信息 public $success =array('file'=>'', 'thumb'=>'', 'name'=>'', 'type'=>'', 'size'=>0); public function __construct($maxSize='',$allowExts='',$thumb=false,$thumbMaxWidth=100,$thumbMaxHeight=100) { if(!empty($maxSize) && is_numeric($maxSize)) { $this->maxSize = $maxSize; } if(!empty($allowExts)) { if(is_array($allowExts)) { $this->allowExts = array_map('strtolower',$allowExts); }else { $this->allowExts = explode(',',strtolower($allowExts)); } } $this->thumb = $thumb; $this->thumbMaxWidth = $thumbMaxWidth; $this->thumbMaxHeight = $thumbMaxHeight; } /** * 保存文件,并根据设置决定是否生成缩略图 * @param $_FILES $file--要保存的附件 * @param String $path--要保存附件的地址 * @return boolean */ public function saveFile($file,$path){ //判断文件是否存在 if(empty($file['size'])||empty($file['tmp_name'])) { $this->error = "1-传入的附件不存在"; return false; } //检查文件大小 if(!$this->_checkSize($file['size'])) { $this->error = '2-上传文件大小不符!'; return false; } //获取文件的后缀名 $fileExt = $this->_fileExt($file['name']); //检查文件类型 if(!$this->_checkExt($fileExt)) { $this->error ='3-上传文件类型不允许'; return false; } // 如果是图像文件 检测文件格式 if(in_array($fileExt,array('gif','jpg','jpeg','bmp','png','swf')) && false === getimagesize($file['tmp_name'])) { $this->error = '4-非法图像文件'; return false; } //生成文件的完整存储路径 $childPath = $this->_getFilePath($path); if(empty($childPath)){ $this->error = "5-出入的文件夹路径不具有写权限"; return false; } //生成文件最终存储路径 $absolutePath = $path.'/'.$childPath; $newFileName = date('YmdHis').$this->_random(4); $storePath = $absolutePath.'/'.$newFileName.'.'.$fileExt; //保存上传的文件 if(@copy($file['tmp_name'],$storePath) || (function_exists("move_uploaded_file")&&@move_uploaded_file($file['tmp_name'],$storePath))) { @unlink($file['tmp_name']); $this->success['file'] = $childPath.'/'.$newFileName.'.'.$fileExt; $this->success['name'] = $newFileName.'.'.$fileExt; $this->success['type'] = $fileExt; $this->success['size'] = $file['size']; }else if(is_readable($file['tmp_name'])){ $fp = @fopen($file['tmp_name'], 'rb'); @flock($fp, 2); $attachedContent = @fread($fp, $file['size']); @fclose($fp); $fp = @fopen($storePath, 'wb'); @flock($fp, 2); if(@fwrite($fp, $attachedContent)){ @unlink($file['tmp_name']); $this->success['file'] = $childPath.'/'.$newFileName.'.'.$fileExt; $this->success['name'] = $newFileName.'.'.$fileExt; $this->success['type'] = $fileExt; $this->success['size'] = $file['size']; } @fclose($fp); }else{ $this->error = "6-文件上传保存错误!"; return false; } if($this->thumb && in_array($fileExt,array('gif','jpg','jpeg','bmp','png'))) { $image = getimagesize($storePath); if(false !== $image) { //是图像文件生成缩略图 $thumbWidth = $this->thumbMaxWidth; $thumbHeight = $this->thumbMaxHeight; $thumbname = $absolutePath.'/'.$newFileName.'.thumb.jpg'; $this->success['thumb'] = $childPath.'/'.$newFileName.'.thumb.jpg'; // 生成图像缩略图 require_once dirname(__FILE__).'/Image.class.php'; Image::thumb($storePath,$thumbname,'',$thumbWidth,$thumbHeight,true); } } return true; } /*** * 替换已经存在的文件。 * @param:$file-上传的文件。 * @param:$absolutePath-源文件的绝对路径。 * @return:0-成功;其他-不成功。 * */ public function replaceFile($file,$absolutePath) { //判断文件是否存在 if(empty($file['size'])||empty($file['tmp_name'])) { $this->error = "1-传入的附件不存在"; return false; } //检查文件大小 if(!$this->_checkSize($file['size'])) { $this->error = '2-上传文件大小不符!'; return false; } //获取文件的后缀名 $fileExt = $this->_fileExt($file['name']); //检查文件类型 if(!$this->_checkExt($fileExt)) { $this->error ='3-上传文件类型不允许'; return false; } $new_name = $absolutePath; $tmp_name = $file['tmp_name']; if(@copy($tmp_name, $new_name) || (function_exists('move_uploaded_file') && @move_uploaded_file($tmp_name, $new_name)) || @rename($tmp_name, $new_name)) { @unlink($tmp_name); return true; }elseif(is_readable($tmp_name)) { $fp = @fopen($tmp_name, 'rb'); @flock($fp, 2); $attachedfile = @fread($fp, $file['size']); @fclose($fp); $fp = @fopen($new_name, 'wb'); @flock($fp, 2); if(@fwrite($fp, $attachedfile)) { @fclose($fp); @unlink($tmp_name); return true; } @fclose($fp); }else{ $this->error = "4-文件上传保存错误!"; return false; } } /** * 获取文件名后缀 * @param string $filename--文件名称 * @return string--文件后缀 **/ private function _fileExt($filename) { return strtolower(trim(substr(strrchr($filename, '.'), 1))); } /** * 检查文件是否允许上传 * @param String $ext--文件的后缀名 * @return boolean--true-允许;false-不允许 */ private function _checkExt($ext) { if(!empty($this->allowExts)) return in_array($ext,$this->allowExts,true); return true; } /** * 检查文件大小是否超出限制 * @param int $size--文件实际大小 * @return boolean */ private function _checkSize($size) { return !($size > $this->maxSize) || (-1 == $this->maxSize); } /** * 生成文件的上传路径 * @param String $relativePath--用户传入的相对路径 * @return string--为创建出目录返回‘’;创建成功返回用户传入相对路径下生成出存储路径 */ private function _getFilePath($relativePath) { $name1 = gmdate('Ym'); $name2 = gmdate('j'); $newfilename = $relativePath.'/'.$name1; if(!is_dir($newfilename)) { if(!@mkdir($newfilename)) { return ''; } } $newfilename .= '/'.$name2; if(!is_dir($newfilename)) { if(!@mkdir($newfilename)) { return ''; } } return $name1.'/'.$name2; } /** * 生成随机数 * @param int $length--生成的随机数长度 * @param int $numeric * @return string--随机数 */ private function _random($length, $numeric = 0) { PHP_VERSION < '4.2.0' ? mt_srand((double)microtime() * 1000000) : mt_srand(); $seed = base_convert(md5(print_r($_SERVER, 1).microtime()), 16, $numeric ? 10 : 35); $seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed)); $hash = ''; $max = strlen($seed) - 1; for($i = 0; $i < $length; $i++) { $hash .= $seed[mt_rand(0, $max)]; } return $hash; } }
相关推荐
这个"PHP上传视频文件图片工具类"提供了一个统一的接口来处理这些操作,并且支持批量上传,使得代码更加简洁高效。同时,该工具类还能够返回JSON格式的数据,这对于前端交互特别有用,因为JSON是目前最广泛使用的...
使用php上传excel的工具类,只要引入即可使用,操作方法见我的博客
在PHP开发中,文件上传是常见的功能之一,用于让用户上传图片、文档等文件到服务器。为了简化这个过程,开发者通常会使用预定义的类库或自定义的上传类。在这个"php中一个很好用的文件上传类.zip"压缩包中,包含了一...
总的来说,"php多文件上传类.zip" 提供了一个强大的工具,帮助开发者轻松应对多文件上传的挑战。通过理解和运用这个类库,你可以更好地优化你的PHP项目,提升用户体验,同时保证上传过程的安全性和稳定性。
在PHP开发中,文件上传功能是常见的需求之一。这个“php上传文件公共类”提供了一个便捷的方法来处理文件上传操作,特别是图片上传。类名为`Upload`,由作者waixin编写,适用于2006年3月16日的PHP环境。 类`Upload`...
总结来说,这个压缩包提供的工具类是PHP开发中的实用组件,它整合了文件上传、图像处理和数据库操作的功能,能够大大简化开发流程,提高效率。在使用时,开发者需理解其内部逻辑,根据项目需求进行适当的定制和优化...
这个"PHP文件上传类"就是这样一个工具,它对PHP的文件上传功能进行了封装,使得开发者只需简单设置参数即可实现文件上传。 1. **文件上传基础** - PHP中的文件上传是通过`$_FILES`全局数组来处理的,它包含了关于...
这个"比较全面的php文件上传类"是一个专门处理文件上传的工具,它封装了相关操作,提供了更方便、安全的方式来处理文件上传过程。下面将详细讲解这个类库的核心知识点及其在实际开发中的应用。 首先,类库的设计...
使用这个类,我们可以创建一个在线解压工具,让用户能够上传zip文件并在线解压。 以下是一个简单的示例代码,展示如何使用ZipArchive打开并解压zip文件: ```php <?php $zip = new ZipArchive(); if ($zip->open('...
1. **PHP文件上传类 (Fileupload.class.php)** 文件上传类主要是为了方便用户在Web端上传文件到服务器。`Fileupload.class.php`可能包含了以下关键功能: - **验证文件类型**:确保上传的文件符合预设的格式,例如...
图片上传涉及到文件上传、验证、重命名、移动到特定目录等多个步骤。一个通用的图片上传工具类可以封装这些过程,确保安全性和一致性。关键方法可能包括`uploadImage()`,它处理上传请求,检查文件类型、大小,然后...
总结,`PHP文件上传和邮件发送的类`是一个实用的工具,它简化了开发过程中与文件上传和邮件发送相关的复杂操作,让开发者能更专注于业务逻辑,提高开发效率。同时,它还提供了更好的用户体验,如支持HTML邮件和无需...
**AjaxFileUpload是JavaScript中一个常用的文件上传工具类,它基于AJAX技术,可以在不刷新页面的情况下实现文件的异步上传。这个工具类通常被用于Web应用中,以提升用户体验,因为它允许用户在后台处理文件上传,而...
"php文件上传类"就是一种工具,它可以帮助开发者更高效、更安全地处理文件上传过程。这个类通常包含一系列方法,用于验证文件类型、大小、处理错误以及实际的文件移动操作。下面将详细讨论相关知识点: 1. **文件...
这里提到的"php支持单个或者多个文件上传类.zip"就是一个这样的工具,它允许你通过一个简单的类来处理单个或多个文件的上传。 这个类库的核心功能是封装了PHP内置的文件上传处理机制,例如`$_FILES`全局数组,`move...
【PHP文件上传类】是一种在PHP开发中处理文件上传功能的工具,它允许用户通过Web表单上传一个或多个文件到服务器。这个类通常包含了处理文件上传的基本逻辑,包括验证文件大小、类型、检查错误、重命名文件以及将...
它们可能被这个SFTP工具类调用,以实现各种功能,比如`Crypt`可能用于处理SSH的加密过程,`File`和`Net`可能涉及文件上传下载和网络连接等操作。 总的来说,这个工具类通过PHP 5.6的语法和功能,结合SSH协议,实现...
PHP 文件上传类实例详解 本文对 PHP 文件上传类进行了详细的实例讲解,分享给大家供大家参考。下面是详细的知识点总结: 一、 PHP 文件上传类的定义 在 PHP 中,文件上传类是指负责处理文件上传的类。这个类通常...
在PHP开发中,文件上传是常见的功能之一,用于让用户上传图片、文档等文件到服务器。这个"一个php文件上传处理类库.zip"提供了一个专门处理文件上传的PHP类库,名为"class.upload.php-master",它简化了文件上传的...
这个"php上传大文件"的类提供了处理大文件上传的能力,且不限制文件类型和大小,这意味着它具有高度的灵活性和实用性。下面将详细介绍相关知识点。 首先,PHP默认设置下对单个上传文件的大小和所有文件的总大小都有...