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 相关文章推荐
phpinfo 系统查看参数函数代码
Jun 05 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
php多层数组与对象的转换实例代码
Aug 05 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
在IIS下安装PHP扩展的方法(超简单)
Apr 10 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
Aug 10 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 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获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
PHP中的替代语法介绍
2015/01/09 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
newxtree.js代码
2007/03/13 Javascript
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
Python开发常用的一些开源Package分享
2015/02/14 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
保密普查工作实施方案
2014/02/25 职场文书
法院信息化建设方案
2014/05/21 职场文书
应届毕业生自荐信
2014/05/28 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
航班延误投诉信
2015/07/02 职场文书
MySQL分库分表详情
2021/09/25 MySQL