php 图片文件上传,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 = "上传文件{$this->origin_name}时出错 : ";

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.'
';

}

/* 检查是否有存放上传文件的目录 */

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;

}

}

参考了网上的资料写的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值