首页 > php框架 > php 文件上传类

php 文件上传类

php 文件上传php 上传文件以及php 上传图片等php 上传代码只是表现形式不一样了。

<?php

class Uploader
{
    var $_base_dir = null;
    var $_rel_dir = null;
    var $_random_fname = false;
    var $_random_fname_len = 5;
    var $_fname_filter = null;
    var $_ftype_filter = null;
    var $_origin_paths = array();

    function Uploader( $base_dir, $rel_dir )
    {
        $this->_base_dir = $base_dir;
        $this->_rel_dir = $rel_dir;
    }
    function setRandomFileName($random_fname, $random_fname_len=5)
    {
        $this->_random_fname = $random_fname;
        $this->_random_fname_len = $random_fname_len;
    }
    function setFileTypeFilter($filter)
    {
        $this->_ftype_filter = $filter;
    }
    function addFile($file, $origin_path=)
    {
        $file = trim($file);
        $origin_path = trim($origin_path);
        if( array_key_exists($file, $this->_origin_paths) )
            return;
        $this->_origin_paths[$file] = $origin_path;
    }
    function upload()
    {
        foreach( $this->_origin_paths as $file => $origin_path )
        {
            $result = $this->_uploadFile($file, $origin_path);

            if( $result != Success )
                return $result;
        }
        return Success;
    }
     /*
      * @desc   上传附件
      * @return  成功返回Success 失败返回失败类型
      * @param   $file 文件名 $orgin_path 文件路径
      */
    function _uploadFile($file, $origin_path)  //上传附件
    {
        $ffile = $_FILES[$file][tmp_name];     //文件被上传后在服务端储存的临时文件名。
        $fname = $_FILES[$file][name];         //客户端机器文件的原名称。
        $fsize = $_FILES[$file][size];         //已上传文件的大小
        $ftype = $_FILES[$file][type];         //文件的 MIME 类型
        $new_path = ;
       
        if( !empty($fname) && is_uploaded_file($ffile) )
        {
            if( !empty($this->_ftype_filter) && !is_null($this->_ftype_filter) )
            {
                $match = false;
                $extensions = explode(,, $this->_ftype_filter);
                foreach($extensions as $extension)
                {
                    if( strtolower(strrchr($fname,.)) == ..strtolower(trim($extension)) )
                    {
                        $match  = true;
                        break;
                    }
                }
                if( !$match )
                    return ErrorFileTypeFilterNotMatch;
            }
            $fpath = $this->_base_dir . $this->_rel_dir;
            if( $this->_random_fname )
             $fname = $this->_getUniqueFileName($fname, $this->_random_fname_len);
            copy( $ffile, $fpath . $fname ) or die( upload failed! );
            $new_path = $this->_rel_dir . $fname;
        }
        if( !empty($origin_path) && !empty($new_path) && $origin_path!=$new_path )
        {
            $this->delete($origin_path);
        }
        if( !empty($new_path) )
            $this->_origin_paths[$file] = $new_path;            
        $Erroe=$_FILES[$file][error];   
        switch($Erroe){
          case 1:
              return ErrExceedUploadMaxFileSize;
              break;
          case 2:
              return ErrExceedHtmlMaxFileSize;
              break;
          case 3:
              return ErrPartFileTrans;
              break;
//          case 4:
//              return ErrNoFileTrans;
//              break;
          default:
             return Success;
        }     
    }
     /*
      * @desc   取得路径 
      * @return  路径
      * @param   无
      */
    function getFilePath()
    {
        return $this->_origin_paths;
    }
    function getFileAbsPath()
    {
        $paths = array();
        foreach( $this->_origin_paths as $path )
        {
            $paths[] = $this->_base_dir . $path;
        }
        return $paths;
    }
    function delete( $fpath )
    {
        if( !empty($fpath) && is_file($this->_base_dir . $fpath) )
            unlink( $this->_base_dir . $fpath ) or die( unlink error );
    }
    function _getUniqueFileName( $fname, $len )
    {
        $timestamp = date(YmdHis);
        srand((double)microtime()*1000000);
        for( $i=0, $randfname=; $i<$len; $i++ )
        {
            $num = rand(0, 35);
            if( $num < 10 )
                $randfname .=  chr( ord(0)+$num );
            else
                $randfname .=  chr( ord(a)+$num-10 );
        }
        return $timestamp._.$randfname.strtolower(strrchr($fname,.));
    }
}
?>


本文地址:http://www.phprm.com/frame/php1004909.html

转载随意,但请附上文章地址:-)

标签:none

发表留言