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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
php array_walk() 数组函数
Jul 12 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
老生常谈PHP面向对象之解释器模式
May 17 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
浅谈PHP中new self()和new static()的区别
Aug 11 PHP
php实现等比例压缩图片
Jul 26 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 PHP
PHP如何防止用户重复提交表单
Dec 09 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类
2006/07/15 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
如何在php中正确的使用json
2013/08/06 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
php下Memcached入门实例解析
2015/01/05 PHP
php实现购物车功能(上)
2020/07/23 PHP
php制作简单模版引擎
2016/04/07 PHP
php实现简单加入购物车功能
2017/03/07 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
详解django中自定义标签和过滤器
2017/07/03 Python
Python管理Windows服务小脚本
2018/03/12 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
用python生成1000个txt文件的方法
2018/10/25 Python
Python用字典构建多级菜单功能
2019/07/11 Python
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
管理失职检讨书
2014/02/12 职场文书
校园文明倡议书
2014/05/16 职场文书
导师工作推荐信范文
2014/05/17 职场文书
小学家长通知书评语
2014/12/31 职场文书
教师个人年度总结
2015/02/11 职场文书
小学班级口号大全
2015/12/25 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android