PHP实现原生态图片上传封装类方法

5年以前  |  阅读数:744 次  |  编程语言:PHP 

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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
贪吃蛇
文件下载
双位运算符
发送邮件
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
提取后缀名
年的日历图
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例