博客列表 >PHP操作文件的上传与下载

PHP操作文件的上传与下载

潜轲的博客
潜轲的博客原创
2017年08月29日 14:51:281082浏览
  1. 文件上传类

    class uploadFile

    {

       //最大值
       private $max_size;
       //前缀
       private $perfix;
       //上传路径
       private $upload_path;
       //新的文件
       private $new;
       //设置不可访问属性值
       public function __set($name, $value)
       {
           $this->$name = $value;
       }
       //返回不可访问属性值
       public function __get($name)
       {
           return $this->$name;
       }

      //上传函数

       public function upload($file)

       {

            if($file['error'])

           {

                  //1.限制文件大小

                 if($file['size']>$this->$max_size)

                 {

                      return '上传文件大小不能超过'.$this->max_size.'请压缩后重试';

                  }

                  //2.避免重名

                 $filename = uniqid($this->perfix,false); //第二个参数true会加上一串字符更唯一

                 //3.按日期存放

                if(is_dir($this->upload_path))
               {
                //创建子目录
               $n_dir = $this->upload_path.'/'.date('Ymd');
               if(is_dir($n_dir))
               {
                }
                else
               {
                     mkdir($n_dir,0777,true);
                }
               }
            else
    {
       mkdir($this->upload_path,0777,true);
       $n_dir = $this->upload_path.'/'.date('Ymd');
    }

    //4.限制文件上传类型
    $allow = ['image/png','image/jpg','image/jpeg','image/gif'];
    if(!(in_array($file['type'],$allow)))
    {
       return '文件类型不符,请核对后上传';
    }
    //用文件信息猜测文件类型  finfo 对象
    $fileInfo = new finfo(FILEINFO_MIME_TYPE);
    //用临时文件判断
    $type =  $fileInfo->file($file['tmp_name']);
    if(!(in_array($type,$allow)))
    {
       return'嘿嘿';
    }

    //5.将文件移入创建的文件夹
    //取得文件类型  strrchr 取得最后一个指定符号后的字符 包括指定字符这里用来获取类型
    $suffix = strrchr($file['name'],'.');
    $new_file = $n_dir.'/'.$filename.$suffix;
    if(move_uploaded_file($file['tmp_name'],$new_file))
    {
       $this->new = $new_file;
       return '上传成功';
    }
    else
    {
       return '移入失败';
    }

    }    

    else
    {
       return '上传失败!';
    }

    }

    }

调用时需用$_FILES['name']获取上传文件。即$file = $_FILES['name']


文件下载

  1. 通过get方式获得文件名,明确文件所在根目录,读出文件。

  2. 告诉浏览器输出的是字节流,单位,文件名及内容长度

  3. 输出文件

    $base = './img';

    //注意编码 iconv
    $file = iconv('utf-8','gbk',$file);

    $full_file = $base.'/'.$file;
    //文件大小
    $fileSize = filesize($file);
    //将内容慢慢读取
    $handle = fopen($file,'r');
    //存储字节流
    $content = '';
    //没到末尾
    while(!feof($handle))
    {
       $content .= fread($handle,1024);
    }
    //告诉浏览器信息
    //1.返回字节流
    header("Content-Type:octet/stream");
    //2.返回的单位是字节
    header("Accept-Range:bytes");
    //3.返回的内容长度
    header("Content-Length:$fileSize");
    //4.返回的文件名称
    header("Content-Disposition:attchment;filename=$file");
    //5.输出字节流
    echo $content;



上一条:测试下一条:PHP文件目录操作补充
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议