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中利用XML技术构造远程服务(下)
Oct 09 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 PHP
Yii学习总结之数据访问对象 (DAO)
Feb 22 PHP
PHP获取数组最大值下标的方法
May 12 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 PHP
php+ajax实现文件切割上传功能示例
Mar 03 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/12/25 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Python元组知识点总结
2019/02/18 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
服装设计专业自荐书范文
2013/12/30 职场文书
机电一体化职业规划书
2014/01/07 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
小学运动会前导词
2015/07/20 职场文书
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS