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获取文件绝对路径的代码(上一级目录)
May 29 PHP
写出高质量的PHP程序
Feb 04 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
在PHP上显示JFreechart画的统计图方法
Nov 03 PHP
php日历制作代码分享
Jan 20 PHP
php面象对象数据库操作类实例
Dec 02 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
php简单生成随机数的方法
Jul 30 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 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
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
python里将list中元素依次向前移动一位
2014/09/12 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
安全生产中长期规划实施方案
2014/02/21 职场文书
户外活动策划方案
2014/03/12 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
国旗下的演讲稿
2014/05/08 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
体育专业自荐书
2014/05/29 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
雷峰塔导游词
2015/02/09 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript