php 图片文件上传类
2015-03-06 19:40
316 查看
<?php class UploadClass{ protected $allow_type = array('gif', 'png', 'jpg','jpeg'); //设置限制上传文件的类型 protected $max_size = 2097152; //限制文件上传大小2M(字节) protected $path = null; //上传文件保存的路径 protected $origin_name = null; //源文件名 protected $tmp_file_name = null; //临时文件名 protected $file_type = null; //文件类型(文件后缀) protected $file_size = null; //文件大小 protected $new_file_name = null; //新文件名 protected $error_id = null; //错误号 protected $error = null; //错误报告消息 public function __construct($path = './upload', $max_size = 2097152) { $this->path = $path; $this->max_size = $max_size; } /** * 用于设置成员属性($path, $allowtype,$maxsize) * 可以通过连贯操作一次设置多个属性值 *@param string $key 成员属性名(不区分大小写) *@param mixed $val 为成员属性设置的值 *@return object 返回自己对象$this,可以用于连贯操作 */ public function set($key, $val) { $key = strtolower($key); if( array_key_exists( $key, get_class_vars(get_class($this) ) ) ){ $this->$key = $val; } return $this; } /* 设置上传出错信息 */ public function get_error() { $str = "上传文件<font color='red'>{$this->origin_name}</font>时出错 : "; switch ($this->error_id) { case 4: $str .= "没有文件被上传"; break; case 3: $str .= "文件只有部分被上传"; break; case 2: $str .= "上传文件的大小超过了指定大小"; break; case 1: $str .= "上传的文件超过了最大限制的值"; break; case -1: $str .= "未允许类型"; break; case -2: $str .= "文件过大,上传的文件不能超过{$this->maxsize}个字节"; break; case -3: $str .= "上传失败"; break; case -4: $str .= "建立存放上传文件目录失败,请重新指定上传目录"; break; case -5: $str .= "必须指定上传文件的路径"; break; case -6: $str .= "上传表单名不存在"; break; default: $str .= "未知错误"; } return $str.'<br>'; } /* 检查是否有存放上传文件的目录 */ protected function check_file_path() { $path = $this->path; if(empty($path)) { $this->set('error_id', -5); return false; } if (!file_exists($this->path) || !is_writable($this->path)) { if (!@mkdir($this->path, 0755, true)) { $this->set('error_id', -5); return false; } } return true; } public function upload($fileField, $new_file_name = null) { if( !isset($_FILES[$fileField]) ) { $this->set('error_id',-6); $this->set('error',$this->get_error()); return false; } //将文件上传的信息取出赋给变量 $name = $_FILES[$fileField]['name']; $tmp_name = $_FILES[$fileField]['tmp_name']; $size = $_FILES[$fileField]['size']; $error = $_FILES[$fileField]['error']; $return = true; if( !empty($name) ) { /* 设置文件信息 */ if($this->set_files($name,$tmp_name,$size,$error)) { /* 上传之前先检查一下大小和类型 */ if($this->check_file_size() && $this->check_file_type()){ /* 为上传文件设置新文件名 */ $this->set_new_file_name($new_file_name); /* 上传文件 返回0为成功, 小于0都为错误 */ //检查文件路径是滞合法 if( !$this->check_file_path() ) { $this->set('error',$this->get_error()); return false; } if($this->move_File()){ return true; }else{ $return=false; } }else{ $return=false; } } else { $return=false; } //如果$return为false, 则出错,将错误信息保存在属性errorMess中 if(!$return) $this->error = $this->get_error(); return $return; } } //判断是不是png gif jpg 图片 public function is_images($file_name) { $images_type = array('gif','jpeg','png','jpg'); $extension = pathinfo($file_name,PATHINFO_EXTENSION); if (in_array($extension,$images_type)) {//后缀是图片 list($width, $height, $type, $attr) = getimagesize($file_name); if (in_array($type,$images_type)) {//确定其内容是真正的图片 return true; } } return false; } public function get_random_name($extend) { $file_name = date('YmdHis')."_".rand(1000,0999); return $file_name.'.'.$extend; } public function get_extend($file_name) { $extend = pathinfo($file_name); $extend = strtolower($extend["extension"]); return $extend; } /** * 获取上传后的文件名称 * @param void 没有参数 * @return string 上传后,新文件的名称, 如果是多文件上传返回数组 */ public function get_file_name() { return $this->new_file_name; } /* 设置和$_FILES有关的内容 */ protected function set_files($name="", $tmp_name="", $size=0, $error=0) { $this->set('error_id', $error); if($error) return false; $this->set('origin_name', $name); $this->set('tmp_file_name',$tmp_name); $this->set('file_type', $this->get_extend($name)); $this->set('file_size', $size); return true; } //设置上传后的文件名称 protected function set_new_file_name($file_name = null) { if( $file_name == null) $this->set('new_file_name', $this->get_random_name( $this->file_type)); else $this->set('new_file_name', $file_name); } //检查上传的文件是否是合法的类型 protected function check_file_type() { if ( !in_array(strtolower( $this->file_type), $this->allow_type)) { $this->set('error_id', -1); return false; } return true; } //检查上传的文件是否是允许的大小 protected function check_file_size() { if ($this->file_size > $this->max_size) { $this->set('error_id', -2); return false; } return true; } //复制上传文件到指定的位置 protected function move_file() { if( $this->error_id == null ) { $path = rtrim($this->path, '/').'/'; $path .= $this->new_file_name; if (@move_uploaded_file($this->tmp_file_name, $path)) { return true; }else{ $this->set('error_id', -3); return false; } } return false; } }
参考了网上的资料写的
相关文章推荐
- php 文件图片上传类程序
- php 简单文件图片上传类
- php文件上传(强大文件图片上传类)
- nginx+php 上传含有php脚本的木马图片文件的漏洞解决
- PHP通过eml邮件文件提取图片附件
- PHP如何禁止图片文件的被盗链
- (转)PHP如何禁止图片文件的被盗链
- PHP编程----遍历目录得到图片文件并输出
- PHP下载CSS文件中的图片
- PHP多文件上传类
- PHP下载CSS文件中的图片
- php 图片上传类代码
- PHP多文件上传类
- 文件上传类和图片处理类
- php 删除记录同时删除图片文件的实现代码
- php 图片上传类代码
- 用php和imagemagick来处理图片文件的上传和缩放处理
- PHP图片上传类带图片显示
- PHP禁止图片文件的被盗链函数
- PHP下载CSS文件中的图片