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数字格式化
Dec 06 PHP
PHP 数组实例说明
Aug 18 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
PHP中你应该知道的require()文件包含的正确用法
Jun 12 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
php微信公众号开发之简答题
Oct 20 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 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的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
常用的javascript function代码
2008/05/23 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
python实现TCP文件传输
2020/03/20 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
财产公证书样本
2014/04/04 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
户外活动总结
2015/02/04 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL