php文件上传类,支持产生文件缩略图
来源:互联网 发布:js div滚动条触发事件 编辑:程序博客网 时间:2024/04/29 00:33
个人写的php文件上传类,支持所有文件上传,对于图片类型的文件,提供产生缩略图方法,用户可以自己进行配置。写的很一般,没有太多的测试,目前是没什么bug,就当提供学习和参考吧,代码:
<?php /** * +---------------------------------------------------------------------- * | 文件上传类 Author Ftd Date: 15-03-18 * | 如果上传的文件是图片类型,提供生成缩略图方法 * +---------------------------------------------------------------------- * | 主要方法:upload();createThumb(); * +---------------------------------------------------------------------- * | 使用方法: 创建一个config = array(); * | 提供参数: * savePath string 可选 文件上传路径(若为空则为当前目录下的upload文件夹) * thumbSavePath string 可选 缩略图上传路径(若为空则代表和savePath相同的路径) * ext string(逗号分割) 可选 允许上传的文件类型(若为空则代表允许上传任何类型的文件) * maxSize int 可选 允许上传的最大值(若为空或为0则表示无限大),此处和php.ini配置文件无关 * fileName string 可选 上传文件名(若为空则使用源文件名) * needThumb bool 可选 是否需要生成缩略图 * thumbWidth int 可选 缩略图宽度(若needThumb为true,则为必需) * thumbHeight int 可选 缩略图高度(若needThumb为true,则为必需) * needReplcePic bool 可选 是否覆盖源文件(若为空则表示不覆盖,若savePath不等于thumbSavePath,此参数失效) * +---------------------------------------------------------------------- * | 举例: * * $config = array( //设置配置参数 * key => value * ) * $obj = new UploadFile($config); //实例化对象 * $obj->upload($_FILES); //上传文件 * $obj->createThumb(); //生成缩略图 * +---------------------------------------------------------------------- * */ class UploadFile { private $savePath ; //上传路径 private $ext = array(); //允许的后缀名,为空则表示不限制 private $fileName ; //文件名 private $fileTempName;//临时文件名 private $maxSize; //允许上传最大值 private $fileExt;//文件后缀名 private $fileSize;//文件大小 private $errorNum; //错误号 private $errorMsg = ''; //错误信息 private $srcFile; //源文件,用来生成缩略图 private $thumbFile;//缩略图文件 private $thumbSavePath;//缩略图上传路径 private $tempThumbImg;//临时缩略图 private $thumbWidth; //缩略图宽度 private $thumbHeight; //缩略图高度 private $needThumb; //是否需要缩略图 private $needReplcePic;//是否覆盖源文件 //默认配置 private $acquiesce_config = array( 'savePath' => './upload/', 'thumbSavePath' => '', 'ext' => '', 'maxSize' => 0, 'fileName' => '', 'needThumb' => false, 'thumbWidth' => 0, 'thumbHeight' => 0, 'needReplcePic' => false ); /** * 构造方法 * @param [array] $config */ public function __construct($config = array()) { //如果参数为完全设置,将其设置为默认参数 $config = array_merge($this->acquiesce_config,$config); $this->set_config($config); } /** * 设置上传配置 * @param [array] $config */ private function set_config($config) { //分割字符串得到文件允许后缀名 $ext_arr = explode(',', $config['ext']); foreach ($ext_arr as $k => $v) { if($v != '') { $this->ext[] = $v; } } $this->set('savePath',$config['savePath']); $this->set('maxSize',$config['maxSize']); $this->set('fileName',$config['fileName']); $this->set('thumbHeight',$config['thumbHeight']); $this->set('thumbWidth',$config['thumbWidth']); $this->set('needThumb',$config['needThumb']); $this->set('needReplcePic',$config['needReplcePic']); $this->thumbSavePath = $config['thumbSavePath'] == '' ? $this->savePath : $config['thumbSavePath']; } /** * [上传文件] * @param [$file($_FILES)] * @return [true|false] */ public function upload($file) { if(!empty($file)) { $fileName = $file['file']['name']; $fileSize = $file['file']['size']; $fileTempName = $file['file']['tmp_name']; $errorNum = $file['file']['error']; $ext = $this->get_fileExt($fileName); //检查文件参数 $flag = $this->check_file_and_config($fileSize,$ext,$errorNum); if(!$flag) { return $this->get_errorMsg(); } //设置文件名 if($this->fileName != null) { $fileName = $this->fileName .'.'. $ext; } //设置文件属性 $this->set_file($fileName,$fileTempName,$fileSize,$ext); //移动(上传)文件 if(!$this->move_file()) { return $this->get_errorMsg(); } return 'success'; } } /** * 得到文件后缀名 * @param [string] $fileName [文件名] * @return [string] [文件后缀名] */ private function get_fileExt($fileName) { //得到文件最后一个小数点,如果为false,说明文件没有后缀名 $is_has_ext = strripos($fileName, '.'); if(false == $is_has_ext) { return ''; } $file_arr = explode('.', $fileName); $fileExt = strtolower($file_arr[count($file_arr) - 1]); return $fileExt; } /** * 检查文件的合法性 * @param [int] $fileSize [文件大小] * @param [string] $ext [文件后缀名] * @param integer $errorNum [错误编号] * @return [true|false] */ private function check_file_and_config($fileSize,$ext,$errorNum = 0) { $this->set('errorNum',$errorNum); if($errorNum != 0) { return false; } if($this->savePath == '') { $this->set('errorNum',7); return false; } if(!in_array($ext, $this->ext) && count($this->ext) != 0) { $this->set('errorNum',5); return false; } if($fileSize > $this->maxSize && $this->maxSize != 0 && $this->maxSize != null) { $this->set('errorNum',6); return false; } return true; } /** * [设置成员变量] * @param [string] $fileName [文件名] * @param [string] $fileTempName [临时文件名] * @param [int] $fileSize [文件大小] * @param [string] $ext [文件后缀名] */ private function set_file($fileName,$fileTempName,$fileSize,$ext) { $this->set('fileName',$fileName); $this->set('fileTempName',$fileTempName); $this->set('fileSize',$fileSize); $this->set('fileExt',$ext); } /** * [移动文件] * @return [true|false] [成功返回true] */ private function move_file() { if($this->errorNum == 0) { //创建文件上传目录 $this->create_folders($this->savePath); $move_file = $this->savePath .'/'. $this->fileName; if(move_uploaded_file($this->fileTempName, $move_file)) { //设置源文件,用来创建缩略图 $this->srcFile = $move_file; return true; }else { $this->set('errorNum',8); return false; } }else{ return false; } } /** * [生成缩略图] * @return [string] */ public function createThumb() { $flag = $this->check_thumb_param(); if(!$flag) { return $this->get_errorMsg(); } $this->build_temp_thumb_img();//创建临时图片 $this->build_thumb_path(); //创建缩略图路径 if(!$this->build_thumb()) { return $this->get_errorMsg(); } return 'create_thumb_success'; } /** * [创建缩略图] * @return [true|false] */ private function build_thumb() { //根据不同后缀名得到不同的方法 $image_create_method = $this->get_create_img_function(); //图片实际宽度 $real_width = imagesx($this->tempThumbImg); //图片实际高度 $real_height = imagesy($this->tempThumbImg); $thumb_img = imagecreatetruecolor($this->thumbWidth, $this->thumbHeight); $flag = imagecopyresampled($thumb_img, $this->tempThumbImg, 0, 0, 0, 0, $this->thumbWidth, $this->thumbHeight, $real_width, $real_height); $image_create_method($thumb_img,$this->thumbFile); if(!$flag) { $this->set('errorNum',13); return false; } return true; } /** * [得到imagejpeg|imagegif|imagepng] * @return [string] [方法名] */ private function get_create_img_function() { if($this->fileExt == 'jpg') { $method = 'image'.'jpeg'; return $method; } $method = 'image'.strtolower($this->fileExt); return $method; } /** * [检查缩略图文件参数] * @return [true|false] */ private function check_thumb_param() { if($this->errorNum != 0) { return false; } if(empty($this->srcFile)) { $this->set('errorNum',9); return false; } if($this->fileExt != 'jpg' && $this->fileExt != 'gif' && $this->fileExt != 'png') { $this->set('errorNum',10); return false; } if(!$this->needThumb) { $this->set('errorNum',11); return false; } if($this->thumbWidth == 0 || $this->thumbHeight == 0 || $this->thumbWidth == '' || $this->thumbHeight == '') { $this->set('errorNum',12); return false; } return true; } /** * [创建缩略图路径] * @return [null] */ private function build_thumb_path() { if($this->savePath == $this->thumbSavePath) { if($this->needReplcePic) { $this->thumbFile = $this->srcFile; }else { $this->thumbFile = $this->savePath.'/'.'thumb-'.$this->fileName; } }else{ $this->create_folders($this->thumbSavePath); $this->thumbFile = $this->thumbSavePath.'/'.$this->fileName; } } /** * [创建临时图片] * @return [null] */ private function build_temp_thumb_img() { switch ($this->fileExt) { case 'jpg': $this->set('tempThumbImg',imagecreatefromjpeg($this->srcFile)); break; case 'gif': $this->set('tempThumbImg',imagecreatefromgif($this->srcFile)); break; case 'png': $this->set('tempThumbImg',imagecreatefrompng($this->srcFile)); break; default: break; } } /** * 返回错误信息 * @return [string] */ private function get_errorMsg() { switch ($this->errorNum) { case 13: $this->errorMsg = "生成缩略图失败"; break; case 12: $this->errorMsg = "错误的缩率图高度或宽度"; break; case 11: $this->errorMsg = "若要生成缩略图,请在config中设置needThumb为true"; break; case 10: $this->errorMsg = "该文件不是图片类型,不能产生缩略图"; break; case 9: $this->errorMsg = "源文件不存在,无法生成缩略图,请先上传文件"; break; case 8: $this->errorMsg = "上传失败"; break; case 7: $this->errorMsg = '请设置上传路径'; break; case 6: $this->errorMsg = '上传文件大小超过maxSize最大值'; break; case 5: $this->errorMsg = "错误的文件类型"; break; case 4: $this->errorMsg = '没有文件被上传'; break; case 3: $this->errorMsg = '文件只有部分被上传'; break; case 2: $this->errorMsg = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'; break; case 1: $this->errorMsg = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值'; break; default: break; } return $this->errorMsg; } /** * set方法(过滤成员参数) * @param $key * @param $value */ public function set($key,$value) { //检验key是否是本类的成员属性 if(array_key_exists($key, get_class_vars(get_class($this)))) { $this->setProperty($key,$value); } } /** * [设置property] * @param [property] $key * @param [property] $value */ private function setProperty($key,$value) { if($key == 'ext') { $ext_arr = explode(',', $value); foreach ($ext_arr as $k => $v) { if($v != '') { $this->ext[] = $v; } } return; } $this->$key = $value; } /** * 递归创建文件夹 * @param [string] $dir [目录] * @return [true|false] */ private function create_folders($dir) { return is_dir($dir) or ($this->create_folders(dirname($dir)) and mkdir($dir, 0777)); }} ?>
如有bug或建议,欢迎指正
0 0
- php文件上传类,支持产生文件缩略图
- php 上传类 支持缩略图 打水印
- 赵祖辉 图片上传类;支持水印-日期文件夹-生成缩略图 ,支持多文件上传,
- php图片文件上传类 (附自动生成缩略图)
- php可生成缩略图的文件上传类实例
- php可生成缩略图的文件上传类实例
- PHP文件上传类(支持单文件上传,也支持多文件上传)
- PHP文件上传类(支持单文件上传,也支持多文件上传)
- PHP文件上传类(支持单文件上传,也支持多文件上传)
- 文件上传缩略图
- 图片 文件 上传 缩略图
- 文件上传显示缩略图
- 文件上传显示缩略图
- asp.net生成缩略图并支持文件上传实现代码
- php上传文件,支持多个文件上传
- C++/php 文件上传,支持断点续传
- thinkPhp 上传文件 缩略图制作
- php 图片操作类,支持生成缩略图,添加水印,上传缩略图
- poj 1002 487-3279
- Java Applet 读写远程本地文件参考资料
- 惨痛教训 beego路由失败
- YTUOJ-判断字符串是否为回文
- phonegap archive 报错 Cordova/CDVViewController.h' file not found
- php文件上传类,支持产生文件缩略图
- Big Endian 和 Little Endian
- Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader
- 【笔记3】获取csi文件,并用MATLAB处理
- 解决VS2008无法打开预编译头Debug\XXX.pch,请重启VS的提示
- 黑马程序员——Object-C基础(五)面向对象的特性:封装
- 10-使用windows7自带的刻录软件刻录光盘
- hdu 1253 胜利大逃亡
- 参照网上修改后的插入算法