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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
粗略计算在线时间,bug:ip相同
Dec 09 PHP
PHP字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
PHP swfupload图片上传的实例代码
Sep 30 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
May 26 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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开发注意事项总结
2015/02/04 PHP
分享php多功能图片处理类
2016/05/15 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
Javascript将string类型转换int类型
2010/12/09 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
Python切片操作深入详解
2018/07/27 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
python动态规划算法实例详解
2020/11/22 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
会计专业自我鉴定范文
2013/12/29 职场文书
年度考核评语
2014/01/19 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python