单文件上传类

<?php

    //文件上传类

    class Upload{
        //增加一个静态属性,用来保存当前错误信息
        public static $error;
        //给外部提供方法,能够上传文件到指定目录,然后重命名文件,并将最终的文件的名字返回

        /*
         * 单文件上传
         * @param1 array $file,一个包含文件上传5个元素的数组(name,tmp_name,type,size,error)
         * @param2 string $path,要上传的文件存储路径,默认为空,表示使用配置文件里的路径
         * @param3 string $allow,允许上传的文件的类型字符串(MIME类型)
         * @param4 int $maxsize
         * @return 成功返回最新的文件名字,失败返回false
        */
        public static function uploadSingle($file,$path,$allow,$maxsize){
            //验证数组的有效性
            if(!(is_array($file) && isset($file['error']) && count($file) == 5)){
                //必须是一个数组同时数组中必须包含下标为error的元素
                //将错误保存到静态属性中
                self::$error = '不是一个有效的上传文件!';
                return false;
            }

            //判断文件是否上传成功:error
            switch($file['error']){
                case 1:
                    //文件超过服务器允许的大小
                    self::$error = '文件超过服务器允许的大小!最大允许' . ini_get('upload_max_filesize') ;    //获取配置文件中的数据值
                    return false;        //break代表结束分支,return代表结束方法
                case 2:
                    //超过浏览器设定的大小
                    self::$error = '文件超过浏览器允许的大小!';
                    return false;
                case 3:
                    //文件上传中断
                    self::$error = '文件只上传了一部分!';
                    return false;
                case 4:
                    //没有选中文件
                    self::$error = '没有选中要上传的文件!';
                    return false;
                case 6:
                case 7:
                    self::$error = '服务器错误!';
                    return false;
            }

            //文件已经上传到服务器(临时文件夹)
            //判断文件是否为允许的类型
            if(strpos($allow,$file['type']) === false){
                //没有在允许的上传列表中匹配到
                self::$error = '当前文件的类型不允许上传,允许的类型有:' . $allow;
                return false;
            }

            //判断文件大小是否是当前允许的
            if($file['size'] > $maxsize){
                //文件超过当前允许最大范围
                self::$error = '文件超出当前允许的最大值,当前最大允许:' . $maxsize . '字节';
                return false;
            }

            //文件的移动:移动到指定位置
            //获取新的文件名字
            $new_name = self::getName($file['name']);
            if(move_uploaded_file($file['tmp_name'],$path . '/' . $new_name)){
                //文件上传成功
                return $new_name;
            }else{
                //移动失败
                self::$error = '文件移动到指定的文件夹失败!';
                return false;
            }

        }

        /*
         * 生成随机文件名:yyyymmddhhiiss+随机6为字符串+后缀名
         * @param1 string $name,文件的名字(带后缀)
         * @return 新的文件名字
        */
        private static function getName($name){
            //构造文件名字
            $new_name = date('YmdHis');    //时间部分

            //随机字符串
            $string = implode('',array_merge(range('a','z'),range('A','Z')));
            for($i = 0;$i < 6;$i++){
                $new_name .= $string[mt_rand(0,strlen($string) - 1)];
            }

            //获取文件后缀名
            return $new_name . strrchr($name,'.');
        }

    }

自定义::::

<?php
 //封装php中的单文件(图片)上传类
 /*
  //参数1:$file 文件数组  5个属性值 name,type,size,tmp,error
  //参数2:文件保存的路径$path  
  //参数3:文件上传允许的类型 $allow数组   $allow=array('image/jpeg','image/jpg','image/png','image/gif')
  //参数4: 允许文件上传的最大大小 $size
  //返回值: return $imageName文件的名字
 */
 header('content-type:text/html;charset=utf-8');
 class Upload{
     //定义一个属性,专门保存错误信息
       public static $error;
      //文件转移的方法
   public function uploadFile($file,$allow,$size,$path){
      //首先判断文件是否已上传到临时目录
       if(!is_array($file)){
          Upload::$error='不是一个有效的文件';
          return false;
       }
      //判断文件是否上传到临时目录成功
      switch($file['error']){
        case 1:
            Upload::$error='上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。';
            return false;
        case 2:
            Upload::$error='上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。';
            return false;
        case 3:
            Upload::$error='文件只有部分被上传';
            return false;
        case 4:
            Upload::$error='没有文件被上传';
             return false;
        case 6:
            Upload::$error='找不到临时文件夹';
            return false;
        case 7:
             Upload::$error='文件写入失败';
             return false;  
      }
      //判断文件类型是否是图片
       if(!in_array($file['type'],$allow)){
          Upload::$error='不是要求的文件类型';
          return false;
       }
      //判断文件的大小是否在允许的范围内
       if($file['size']>$size){
          Upload::$error='超出允许最大文件大小';
          return false;
       }
       //文件转移
       if(move_uploaded_file($file['tmp_name'],$path.'/'.$this->getName($file))){
          return $file['name'];
       }else{
          return Upload::$error;
       }  
   }
    //创建目录的方法
        private function mkPath($path){
        if(!is_dir($path)){
          return mkdir('images');
        }
    }
    //文件重命名
        private function getName($file){
          return time().$file['name'];
        }

 }

 使用方法

$myfile=$_FILES['myfile'];
//var_dump($myfile);exit;
$path='./images';
$size='2000000';
if($photo=$upload->uploadFile($myfile,$size,$path)){
    //echo $photo;exit;
    $data=$_POST;
    $data['photo']=$photo;
    //var_dump($data);exit;
    $res=$db->db_insert('book',$data);
    //echo $res;exit;
    if($res){
        echo 'ok';
        header('refresh:2;url=list.php');
    }else{
        echo 'fail';
        header('refresh:2;url=form.php');
    }
}else{
    echo '上传失败,错误信息是:'.Upload::$error;
}

 

enctype='multipart/form-data'

 

posted on 2016-04-22 20:04  *孤独的夜行者*  阅读(321)  评论(0编辑  收藏  举报

导航