PHP实现原生态图片上传封装类方法


Posted in PHP onNovember 08, 2016

PHP图片上传类,经典方式,不过上传效率还算可以,我自己用过的一个类,当时对这个类做了些修改,以满足自己特定功能的需要,对PHP熟悉的,可对这个上传类做优化和修改,后附有调用方法,让PHP开发者上传图片轻松容易就做到,先上类代码:

<?php
class FileUpload_Single
{
//user define -------------------------------------
var $accessPath ;
var $fileSize=200;
var $defineTypeList="jpg|jpeg|gif|bmp";//string jpg|gif|bmp ...
var $filePrefix= "useruplod_";//上传后的文件名前缀,可设置为空
var $changNameMode;//图片改名的规则,暂时只有三类,值范围 : 0 至 2 任一值
var $uploadFile;//array upload file attribute
var $newFileName;
var $error;

function TODO()
{//main 主类:设好参数,可以直接调用
$pass = true ;

if ( ! $this -> GetFileAttri() )

{
  $pass = false;

}

if( ! $this -> CheckFileMIMEType() )

 {

 $pass = false;

 $this -> error .= die("<script language=\"javascript\">alert('图片类型不正确,允许格式:jpg|jpeg|gif|bmp。');history.back()</script>");

}

if( ! $this -> CheckFileAttri_size() )

{
  $pass = false;

  $this -> error .= die("<script language=\"javascript\">alert('上传的文件太大,请确保在200K以内。');history.back()</script>");

  return false;

}

if ( ! $this -> MoveFileToNewPath() )

{
  $pass = false;
  $this -> error .= die("<script language=\"javascript\">alert('上传失败!文件移动发生错误!');history.back()</script>");
} 

 return $pass;

}

function GetFileAttri()

{

 foreach( $_FILES as $tmp )

 {

  $this -> uploadFile = $tmp;

 }

 return (empty( $this -> uploadFile[ 'name' ])) ? false : true;

}
function CheckFileAttri_size()
{
 if ( ! empty ( $this -> fileSize ))
 {
  if ( is_numeric( $this -> fileSize ))
  {
  if ($this -> fileSize > 0)
  {
   return ($this -> uploadFile[ 'size' ] > $this -> fileSize * 1024) ? false : true ;
  } 
  }
  else
  {
  return false;

  }

 }

 else

 {

  return false;

 }

 }

 function ChangeFileName ($prefix = NULL , $mode)

 {// string $prefix , int $mode

 $fullName = (isset($prefix)) ? $prefix."_" : NULL ;

 switch ($mode)

 {

  case 0  : $fullName .= rand( 0 , 100 ). "_" .strtolower(date ("ldSfFYhisa")) ; break;

  case 1  : $fullName .= rand( 0 , 100 ). "_" .time(); break;

  case 2  : $fullName .= rand( 0 , 10000 ) . time();  break;

  default : $fullName .= rand( 0 , 10000 ) . time();  break;

 }

 return $fullName;

 }

 function MoveFileToNewPath()

 {

 $newFileName = NULL;

 $newFileName = $this -> ChangeFileName( $this -> filePrefix , 2 ). "." . $this -> GetFileTypeToString();

 //检查目录是否存在,不存在则创建,当时我用的时候添加了这个功能,觉得没用的就注释掉吧

 /*

 $isFile = file_exists( $this -> accessPath);

 clearstatcache();

  if( ! $isFile && !is_dir($this -> accessPath) )

  {

    echo $this -> accessPath;

  @mkdir($this -> accessPath);

  }*/

$array_dir=explode("/",$this -> accessPath);//把多级目录分别放到数组中

 for($i=0;$i<count($array_dir);$i++){

 $path .= $array_dir[$i]."/";

 if(!file_exists($path)){

  mkdir($path);

 }

 }

/////////////////////////////////////////////////////////////////////////////////////////////////

  if ( move_uploaded_file( $this -> uploadFile[ 'tmp_name' ] , realpath( $this -> accessPath ) . "/" .$newFileName ) )
  {
    $this -> newFileName = $newFileName;
      return true;
  }else{
    return false;
  }
/////////////////////////////////////////////////////////////////////////////////////////////////
}
function CheckFileExist( $path = NULL)
 {
 return ($path == NULL) ? false : ((file_exists($path)) ? true : false);
 }
function GetFileMIME()
 {
 return $this->GetFileTypeToString();
 }
function CheckFileMIMEType()
 {
 $pass = false;
 $defineTypeList = strtolower( $this ->defineTypeList);
 $MIME = strtolower( $this -> GetFileMIME());
 if (!empty ($defineTypeList))
 {
  if (!empty ($MIME))
  {
  foreach(explode("|",$defineTypeList) as $tmp)
  {
   if ($tmp == $MIME)
   {
   $pass = true;
   }
  }
  }
  else
  {
  return false;
  }   
  }
  else
  {
  return false;
  }

  return $pass;

 }

 function GetFileTypeToString()

 {

 if( ! empty( $this -> uploadFile[ 'name' ] ) )
 {
  return substr( strtolower( $this -> uploadFile[ 'name' ] ) , strlen( $this -> uploadFile[ 'name' ] ) - 3 , 3 ); 
 }
 }
}

?>

以下是PHP上传类的调用方法,PHP代码如下:

<?php
include 'up.class.php';//加载PHP上传类文件
if (empty($HTTP_POST_FILES['image_file']['tmp_name']))//判断接收数据是否为空
{

    $tmp = new FileUpload_Single;

    $tmp -> accessPath ='upload';//图片上传的目录,这里是当前目录下的upload目录,可自己修改

    if ( $tmp -> TODO() )

    {
      $filename=$tmp -> newFileName;//生成的文件名
      echo "图片上传成功,路径为:upload/".$filename;
    }else{
      echo $tmp -> error;
    }     
}
else{
  echo "没有图片数据可上传";
}
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
用php实现选择排序的解决方法
May 04 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
php cli配置文件问题分析
Oct 15 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
php-app开发接口加密详解
Apr 18 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 #PHP
Yii2框架BootStrap样式的深入理解
Nov 07 #PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 #PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 #PHP
深入了解PHP中的Array数组和foreach
Nov 06 #PHP
PHP运行模式汇总
Nov 06 #PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 #PHP
You might like
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP7修改的函数
2021/03/09 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
二行代码解决全部网页木马
2008/03/28 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
Javascript编写2048小游戏
2015/07/07 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
Python3 伪装浏览器的方法示例
2017/11/23 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
python实现微信自动回复功能
2018/04/11 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
python 字段拆分详解
2019/12/17 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
pytorch梯度剪裁方式
2020/02/04 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
COSETTE官网:奢华,每天
2020/03/22 全球购物
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
机关单位动员会主持词
2014/03/20 职场文书
革命电影观后感
2015/06/18 职场文书
python单元测试之pytest的使用
2021/06/07 Python