zoukankan      html  css  js  c++  java
  • 单文件上传类

    <?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'

  • 相关阅读:
    visual studio 目录
    CMake教程小结
    CMake教程
    blender坐标系梳理
    Blender3d obj坐标转换示意图
    行列式的向量形式
    高等代数 第一章 行列式
    C++ Union实验
    git 分支合并学习实验
    C++使用memset注意事项
  • 原文地址:https://www.cnblogs.com/jhy-ocean/p/5422604.html
Copyright © 2011-2022 走看看