zoukankan      html  css  js  c++  java
  • php文件操作(最后进行文件常用函数封装)

    文件信息相关API

        $filename="./1-file.php";
        //filetype($filename):获取文件的类型,返回的是文件的类型
        echo '文件类型为:',filetype($filename),"
    ";//file
        //filesize($filename):获得文件的大小,返回字节
        echo '文件大小为:',filesize($filename),"
    ";//1214
        //filectime($filename):获取文件的创建时间
        echo '文件创建时间为:',filectime($filename),"
    ";//1578719729
        echo '文件创建时间为:',date('Y年m月d日 H:i:s',filectime($filename)),"
    ";//2020年01月11日 13:15:29
        //filemtime($filename):文件的修改时间
        echo '文件的修改时间为:',date("Y/m/d H:i:s",filemtime($filename)),"
    ";//2020/01/11 14:28:20
        //fileatime($filename):文件的最后访问时间
        echo '文件的最后访问时间为:',date("Y/m/d H:i:s",fileatime($filename)),"
    ";//2020/01/11 14:28:20

    检测文件是否可读、可写、可执行is_readable()、is_writeable()、is_executable();

        $filename="./1-file.php";
        var_dump(
          is_readable($filename),//bool(true)
          is_writable($filename),//bool(true)
          is_writeable($filename),//bool(true)
          is_executable($filename)//bool(false)
        );

    is_file($filename):检测是否为文件,并且文件存在

        var_dump(is_file($filename));//bool(true)

    pathinfo():文件路径相关信息

        $filename="./test1.txt";
        $pathinfo=pathinfo($filename);
        print_r($pathinfo);
        /*
        Array
        (
           [dirname] => .
           [basename] => test1.txt
           [extension] => txt
           [filename] => test1
        )
        */
        echo '文件扩展名:',pathinfo($filename,PATHINFO_EXTENSION),"
    ";//txt
        $filename=__FILE__;  
        echo pathinfo($filename,PATHINFO_DIRNAME),"
    ";//D:phpstudy_proWWWphptest
        echo pathinfo($filename,PATHINFO_BASENAME),"
    ";//2-path.php
        echo pathinfo($filename,PATHINFO_EXTENSION),"
    ";//php
        echo pathinfo($filename,PATHINFO_FILENAME),"
    ";//2-path
        //basename():返回路径中的文件名部分
        echo basename($filename),"
    ";//2-path.php
        echo basename($filename,'.php'),"
    ";//2-path
        //dirname():返回文件名中路径部分
        echo dirname($filename),"
    ";//D:phpstudy_proWWWphptest
        //file_exists():检测文件或者目录是否存在
        var_dump(file_exists($filename));//D:phpstudy_proWWWphptest2-path.php:31:bool(true)
        touch('aa.txt');

    文件相关操作
    文件创建、删除、剪切、重命名、拷贝

        //touch($filename):创建文件
        $filename='test1.txt';
        var_dump(touch($filename));//bool(true)
        //unlink($filename):删除指定文件
        var_dump(unlink($filename));//bool(true)
        //检测文件存在则删除
        if(file_exists($filename)){
            if(unlink($filename)){
                echo '文件删除成功';
            }else{
                echo '文件删除失败';
            }
        }else{
            echo '要删除的文件不存在';//要删除的文件不存在
        }
        touch($filename);
        //rename($filename,$newname):重命名或者剪切文件
        $newname='test111.txt';
        if(rename($filename,$newname)){
            echo '重命名成功';//重命名成功
        }else{
            echo '重命名失败';
        }
    
        //将test123.txt剪切到test目录下test123.txt
         $filename='test123.txt';
         $path='./test/test123.txt';
         if(file_exists($filename)){
           if(rename($filename,$path)){
             echo '文件剪切成功';
           }else{
             echo '文件剪切失败';//文件剪切失败
           }
         }else{
           echo '文件不存在';
         }
    
        //copy($source,$dest):复制文件
         $source='2-path.php';
         $dest='test123/2-path.php';
         if(copy($source,$dest)){
           echo '文件拷贝成功';
         }else{
           echo '文件拷贝失败';//文件拷贝失败
         }
        //拷贝远程文件需要开启PHP配置文件中的allow_url_fopen=On
        var_dump(copy('http://blog.phpfamily.org/wp-content/uploads/2016/09/king-1.jpg','./king-1.jpg'));//bool(false)

    文件内容相关操作

        //fopen():打开指定文件,以指定的方式来打开
        $handle=fopen($filename,'r');
         var_dump($handle);//resource(5) of type (stream)
    
        //fread():读取文件内容 一个中文3个字节
         $res=fread($handle,3);
         echo $res,"
    ";//
    
         $res=fread($handle,3);
         echo $res,"
    ";//是(接着上一次继续读取)
    
        //filesize() 函数返回指定文件的大小
         echo filesize($filename),"
    ";//55
         $res=fread($handle,filesize($filename));
         echo $res,"
    ";//(接着上一次继续读取)读取全部内容
         //一段测试文本
        //这是另一段测试文本hh
    
        //ftell返回文件指针读/写的位置
         echo ftell($handle),"
    ";//55
    
        var_dump(fread($handle,21));//string(0) ""
        //fseek($handle,$num):重置指针
        fseek($handle,0);
        var_dump(fread($handle,21));//string(21) "这是一段测试文"
    
        //fclose($handle):关闭文件句柄
        fclose($handle);
        var_dump(fread($handle,21));//bool(false)

    文件写入

        $filename=__DIR__.'/aa.txt';
        //rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在
        $handle=fopen($filename,'rb+');
        //fwrite()/fputs():写入内容
        //注意:fwrite向文件写入内容,如果之前有内容,会产生覆盖
        fwrite($handle,'abcdef',3);
        fclose($handle);
        //abc是一段测试文本
        //这是另一段测试文本hh

    文件追加

        //如果文件不存在会创建,
        //如果文件存在,会先将文件内容截断为0,接着在开始写入
        $filename="./aa.txt";
        //ab+ 追加模式
        $handle=fopen($filename,'ab+');
        fwrite($handle,PHP_EOL.'hello king');
        fclose($handle);
        //abc是一段测试文本
        //这是另一段测试文本hh
        //hello king

    截断文件

        $filename='aa.txt';
        $handle=fopen($filename,'rb+');
        //ftruncate():截断文件
        ftruncate($handle,4);
        fclose($handle);
        //abcæ 第四个中文被截断后的奇葩效果哈哈哈哈

    检测文件指针是否到了文件末尾

        $filename='aa.txt';
        $handle=fopen($filename,'rb+');
        //feof():检测文件指针是否到了文件末尾
        while(!feof($handle)){
          //一个字符一个字符读取
          // echo fgetc($handle);
          //一行一行读取
          echo fgets($handle)."
    ";
          //一行一行读取,并且过滤HTML标记
          echo strip_tags(fgets($handle))."
    ";
          //fgetss() 函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记
          echo fgetss($handle);
        }

    fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段

        $filename='user.csv';
        $handle=fopen($filename,'rb+');
         $rows=[];
         while($row=fgetcsv($handle)){
           $rows[]=$row;
         }
         print_r($rows);
         
        $handle=fopen('user1.csv','rb+');
        while($row=fgetcsv($handle,0,'-')){
          print_r($row);
        }

    fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件

        $filename='user3.csv';
        $handle=fopen($filename,'wb+');
    
        $data=[
          ['id'=>1,'courseName'=>'ios','courseDesc'=>'this is ios'],
          ['id'=>2,'courseName'=>'android','courseDesc'=>'this is android'],
          ['id'=>3,'courseName'=>'swift','courseDesc'=>'this is swift']
        ];
        foreach($data as $val){
          fputcsv($handle,$val,'-');
        }
        fclose($handle);

    获取到文件中的文本

        $filename="./aa.txt";
        $string=file_get_contents($filename);
        echo $string;
        //abc是一段测试文本
        //这是另一段测试文本hh
        //hello king

    向文件中写入内容
    不存在则创建再写入

        $filename='./aa.txt';
        //file_put_contents($filename,$data):向文件中写入内容
        //$data是字符串格式
        file_put_contents($filename,'this is a test');
        $res=file_get_contents($filename);
        print_r($res);//this is a test
        echo "
    ";
        //如果不想覆盖之前的内容,可以先把文件中读取出来,接着再来写入
         $string=file_get_contents($filename);
         $data=$string.'this is a test';
         file_put_contents($filename,$data);
         $res=file_get_contents($filename);
         print_r($res);//this is a testthis is a test
    
        //如果文件不存在,file_put_contents()会创建这个文件
        $filename='aaa.txt';
         $data=[
           ['a','b','c'],
           ['d','e','f']
         ];
         file_put_contents($filename,$data);
         
        //数组或者对象序列化之后写入文件
         $data=['a','b','c'];
         $data=serialize($data);
         file_put_contents($filename,$data);
         $res=file_get_contents($filename);
         print_r(unserialize($res));
        //(
        //[0] => a
        //[1] => b
        //[2] => c
        //)
    
        // 将数组或者对象转换成json之后写入文件
         $data=[
           ['a','b','c'],
           ['d','e','f']
         ];
         $data=json_encode($data);
         file_put_contents($filename,$data);
         $res=json_decode(file_get_contents($filename));
         print_r($res);
        //
        //Array
        //(
        //    [0] => Array
        //    (
        //        [0] => a
        //        [1] => b
        //[2] => c
        //        )
        //
        //    [1] => Array
        //(
        //    [0] => d
        //    [1] => e
        //[2] => f
        //        )
        //
        //)

    常用函数封装:

    【文件常用操作函数封装】

        /**
         * 创建文件操作
         * @method create_file
         * @param  string      $filename 文件名
         * @return boolean                true|false
         */
        function create_file(string $filename){
          //检测文件是否存在,不存在则创建
          if(file_exists($filename)){
            return false;
          }
          //检测目录是否存在,不存在则创建
          if(!file_exists(dirname($filename))){
            //创建目录,可以创建多级
            mkdir(dirname($filename),0777,true);
          }
          if(file_put_contents($filename,'')!==false){
            return true;
          }
          return false;
        }
         var_dump(create_file('2.txt'));//bool(true)
         var_dump(create_file('a/4.txt'));//bool(true)
    
    
        /**
         * 删除文件操作
         * @method del_file
         * @param  string   $filename 文件名
         * @return boolean             true|false
         */
        function del_file(string $filename){
          //检测删除的文件是否存在,并且是否有权限操作
          if(!file_exists($filename)||!is_writable($filename)){
            return false;
          }
          if(unlink($filename)){
            return true;
          }
          return false;
        }
         var_dump(del_file('a/3.txt'));//bool(false)
    
    
        /**
         * 拷贝文件操作
         * @method copy_file
         * @param  string    $filename 文件名
         * @param  string    $dest     指定目录
         * @return boolean              true|false
         */
        function copy_file(string $filename,string $dest){
          //检测$dest是否是目标并且这个目录是否存在,不存在则创建
          if(!is_dir($dest)){
            mkdir($dest,0777,true);
          }
          $destName=$dest.DIRECTORY_SEPARATOR.basename($filename);
          //检测目标路径下是否存在同名文件
          if(file_exists($destName)){
            return false;
          }
          //拷贝文件
          if(copy($filename,$destName)){
            return true;
          }
          return false;
        }
        var_dump(copy_file('2.txt','a'));//bool(true)
    
    
        /**
         * 重命名操作
         * @method rename_file
         * @param  string      $oldName 原文件
         * @param  string      $newName 新文件名
         * @return boolean               true|false
         */
        function rename_file(string $oldName,string $newName){
          //检测原文件并且存在
          if(!is_file($oldName)){
            return false;
          }
          //得到原文件所在的路径
          $path=dirname($oldName);
          $destName=$path.DIRECTORY_SEPARATOR.$newName;
          if(is_file($destName)){
            return false;
          }
          if(rename($oldName,$newName)){
            return true;
          }
          return false;
        }
        // var_dump(rename_file('2.txt','333.txt'));
    
    
        /**
         * 剪切文件操作
         * @method cut_file
         * @param  string   $filename 原文件
         * @param  string   $dest     目标路径
         * @return boolean             true|false
         */
        function cut_file(string $filename,string $dest){
          if(!is_file($filename)){
            return false;
          }
          if(!is_dir($dest)){
            mkdir($dest,0777,true);
          }
          $destName=$dest.DIRECTORY_SEPARATOR.basename($filename);
          if(is_file($destName)){
            return false;
          }
          if(rename($filename,$destName)){
            return true;
          }
          return false;
        }
         var_dump(cut_file('333.txt','a'));
         var_dump(cut_file('22.txt','a'));

    【文件信息相关函数封装】

        /**
         * 返回文件信息
         * @method get_file_info
         * @param  string        $filename 文件名
         * @return mixed                  文件信息相关数组|false
         */
        function get_file_info(string $filename){
          if(!is_file($filename)||!is_readable($filename)){
            return false;
          }
          return [
            'atime'=>date("Y-m-d H:i:s",fileatime($filename)),
            'mtime'=>date("Y-m-d H:i:s",filemtime($filename)),
            'ctime'=>date("Y-m-d H:i:s",filectime($filename)),
            'size'=>trans_byte(filesize($filename)),
            'type'=>filetype($filename)
          ];
        }
        var_dump(get_file_info('22.txt'));
    
    
        /**
         * 字节单位转换的函数
         * @method trans_byte
         * @param  int        $byte      字节
         * @param  integer    $precision 默认精度,保留小数点后2位
         * @return string                转换之后的字符串
         */
        function trans_byte(int $byte,int $precision=2){
          $kb=1024;
          $mb=1024*$kb;
          $gb=1024*$mb;
          $tb=1024*$gb;
          if($byte<$kb){
            return $byte.'B';
          }elseif($byte<$mb){
            return round($byte/$kb,$precision).'KB';
          }elseif($byte<$gb){
            return round($byte/$mb,$precision).'MB';
          }elseif($byte<$tb){
            return round($byte/$gb,$precision).'GB';
          }else{
            return round($byte/$tb,$precision).'TB';
          }
        }
        var_dump(trans_byte(12345678));//string(7) "11.77MB"

    【文件读写函数封装】

        /**
         * 读取文件内容,返回字符串
         * @method read_file
         * @param  string    $filename 文件名
         * @return mixed              文件内容|false
         */
        function read_file(string $filename){
          //检测是否是一个文件并且文件已存在
          if(is_file($filename) && is_readable($filename)){
            return file_get_contents($filename);
          }
          return false;
        }
        var_dump(read_file('232.txt'));//bool(false)
    
    
        /**
         * 读取文件中的内容到数组中
         * @method read_file_array
         * @param  string          $filename         文件名
         * @param  boolean         $skip_empty_lines 是否过滤空行
         * @return mixed                            array|false
         */
        function read_file_array(string $filename,bool $skip_empty_lines=false){
          if(is_file($filename)&&is_readable($filename)){
            if($skip_empty_lines){
              return file($filename,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
            }else{
              return file($filename);
            }
          }
          return false;
        }
        var_dump(read_file_array('22.txt',true));
    
    
        /**
         * 向文件中写入内容
         * @method write_file
         * @param  string     $filename 文件名
         * @param  mixed      $data     数据,数组和对象需要处理
         * @return boolean               true|false
         */
        function write_file(string $filename,$data){
          $dirname=dirname($filename);
          //检测目标路径是否存在
          if(!file_exists($dirname)){
            mkdir($dirname,0777,true);
          }
          //判断内容是否是数组或者对象
          if(is_array($data)||is_object($data)){
            //序列化数据
            $data=serialize($data);
          }
          //向文件中写入内容
          if(file_put_contents($filename,$data)!==false){
            return true;
          }else{
            return false;
          }
        }
        var_dump(write_file('c/1.txt',['a','b','c']));
    
    
        /**
         * 向文件中写入内容,之前内容不清空
         * @method write_file1
         * @param  string      $filename  文件名
         * @param  mixed       $data      数据
         * @param  boolean     $clearFlag 是否清空文件
         * @return boolean                 true|false
         */
        function write_file1(string $filename,$data,bool $clearFlag=false){
          $dirname=dirname($filename);
          //检测目标路径是否存在
          if(!file_exists($dirname)){
            mkdir($dirname,0777,true);
          }
          //检测文件是否存在并且可读
          if(is_file($filename)&&is_readable($filename)){
            //读取文件内容,之后和新写入的内容拼装到一起
            if(filesize($filename)>0){
              $srcData=file_get_contents($filename);
            }
          }
    
          //判断内容是否是数组或者对象
          if(is_array($data)||is_object($data)){
            //序列化数据
            $data=serialize($data);
          }
          //拼装到一起
          $data=$srcData.$data;
          //向文件中写入内容
          if(file_put_contents($filename,$data)!==false){
            return true;
          }else{
            return false;
          }
        }
        var_dump(write_file1('22.txt','hello world'));
    
    
        /**
         * 截断文件到指定大小
         * @method truncate_file
         * @param  string        $filename 文件名
         * @param  int           $length   长度
         * @return boolean                 true|false
         */
        function truncate_file(string $filename,int $length){
          //检测是否是文件
          if(is_file($filename)&&is_writable($filename)){
            $handle=fopen($filename,'r+');
            $length=$length<0?0:$length;
            ftruncate($handle,$length);
            fclose($handle);
            return true;
          }
          return false;
        }
        var_dump(truncate_file('22.txt',2));

    【文件下载函数封装】

        /**
         * 下载文件
         * @method down_file
         * @param  string    $filename     文件名
         * @param  array     $allowDownExt 允许下载的文件类型
         * @return void
         */
        function down_file(string $filename,array $allowDownExt=array('jpeg','jpg','png','gif','txt','html','php','rar','zip')){
          //检测下载文件是否存在,并且可读
          if(!is_file($filename)||!is_readable($filename)){
            return false;
          }
          //检测文件类型是否允许下载
          $ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
          if(!in_array($ext,$allowDownExt)){
            return false;
          }
          //通过header()发送头信息
          //告诉浏览器输出的是字节流
          header('Content-Type:application/octet-stream');
    
          //告诉浏览器返回的文件大小是按照字节进行计算的
          header('Accept-Ranges: bytes');
    
          //告诉浏览器返回的文件大小
          header('Accept-Length: '.filesize($filename));
    
          //告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称
          header('Content-Disposition: attachment;filename=king_'.basename($filename));
    
          //读取文件中的内容
          readfile($filename);
          exit;
    
        }
    
    规定每次读取文件的字节数为1024字节,直接输出数据
        /**
         * 下载文件
         * @method down_file
         * @param  string    $filename     文件名
         * @param  array     $allowDownExt 允许下载的文件类型
         * @return void
         */
        function down_file1(string $filename,array $allowDownExt=array('jpeg','jpg','png','gif','txt','html','php','rar','zip')){
          //检测下载文件是否存在,并且可读
          if(!is_file($filename)||!is_readable($filename)){
            return false;
          }
          //检测文件类型是否允许下载
          $ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
          if(!in_array($ext,$allowDownExt)){
            return false;
          }
          //通过header()发送头信息
    
          //告诉浏览器输出的是字节流
          header('Content-Type:application/octet-stream');
    
          //告诉浏览器返回的文件大小是按照字节进行计算的
          header('Accept-Ranges: bytes');
    
          $filesize=filesize($filename);
          //告诉浏览器返回的文件大小
          header('Accept-Length: '.$filesize);
    
          //告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称
          header('Content-Disposition: attachment;filename=king_'.basename($filename));
    
          //读取文件中的内容
    
          //规定每次读取文件的字节数为1024字节,直接输出数据
          $read_buffer=1024;
          $sum_buffer=0;
          $handle=fopen($filename,'rb');
          while(!feof($handle) && $sum_buffer<$filesize){
            echo fread($handle,$read_buffer);
            $sum_buffer+=$read_buffer;
          }
          fclose($handle);
          exit;
        }
    
        //在具体页面调用时
        require_once 'file.func.php';
        $filename=$_GET['filename'];
        down_file1($filename);

    【文件上传函数封装】

        /**
         * 单文件上传
         * @method upload_file
         * @param  array       $fileInfo   上传文件的信息,是一个数组
         * @param  string      $uploadPath 文件上传默认路径
         * @param  boolean     $imageFlag  是否检测真实图片
         * @param  array       $allowExt   允许上传的文件类型
         * @return mixed                  成功返回文件最终保存路径及名称,失败返回false
         */
        function upload_file(array $fileInfo,string $uploadPath='./uploads',bool $imageFlag=true,array $allowExt=array('jpeg','jpg','png','gif'),int $maxSize=2097152){
          define('UPLOAD_ERRS',[
            'upload_max_filesize'=>'超过了PHP配置文件中upload_max_filesize选项的值',
            'form_max_size'=>'超过了表单MAX_FILE_SIZE选项的值',
            'upload_file_partial'=>'文件部分被上传',
            'no_upload_file_select'=>'没有选择上传文件',
            'upload_system_error'=>'系统错误',
            'no_allow_ext'=>'非法文件类型',
            'exceed_max_size'=>'超出允许上传的最大值',
            'not_true_image'=>'文件不是真实图片',
            'not_http_post'=>'文件不是通过HTTP POST方式上传上来的',
            'move_error'=>'文件移动失败'
          ]);
    
          //检测是否上传是否有错误
          if($fileInfo['error']===UPLOAD_ERR_OK){
            //检测上传文件类型
            $ext=strtolower(pathinfo($fileInfo['name'],PATHINFO_EXTENSION));
            if(!in_array($ext,$allowExt)){
              echo  UPLOAD_ERRS['no_allow_ext'];
              return false;
            }
            //检测上传文件大小是否符合规范
            if($fileInfo['size']>$maxSize){
              echo UPLOAD_ERRS['exceed_max_size'];
              return false;
            }
            //检测是否是真实图片
            if($imageFlag){
              if(@!getimagesize($fileInfo['tmp_name'])){
                echo UPLOAD_ERRS['not_true_image'];
                return false;
              }
            }
            //检测文件是否通过HTTP POST方式上传上来的
            if(!is_uploaded_file($fileInfo['tmp_name'])){
              return UPLOAD_ERRS['not_http_post'];
            }
            //检测目标目录是否存在,不存在则创建
            if(!is_dir($uploadPath)){
              mkdir($uploadPath,0777,true);
            }
            //生成唯一文件名,防止重名产生覆盖
            $uniName=md5(uniqid(microtime(true),true)).'.'.$ext;
            $dest=$uploadPath.DIRECTORY_SEPARATOR.$uniName;
    
            //移动文件
            if(@!move_uploaded_file($fileInfo['tmp_name'],$dest)){
              echo UPLOAD_ERRS['move_error'];
              return false;
            }
            echo '文件上传成功';
            return $dest;
          }else{
            switch($fileInfo['error']){
              case 1:
              // $mes='超过了PHP配置文件中upload_max_filesize选项的值';
              $mes=UPLOAD_ERRS['upload_max_filesize'];
              break;
              case 2:
              $mes=UPLOAD_ERRS['form_max_size'];
              break;
              case 3:
              $mes=UPLAOD_ERRS['upload_file_partial'];
              break;
              case 4:
              $mes=UPLOAD_ERRS['no_upload_file_select'];
              break;
              case 6:
              case 7:
              case 8:
              $mes=UPLAOD_ERRS['upload_system_error'];
              break;
            }
            echo $mes;
            return false;
          }
        }
    
        //在具体页面调用时
        require_once 'file.func.php';
        $fileInfo=$_FILES['myFile'];
        var_dump(upload_file($fileInfo));

    【文件压缩与解压缩函数封装】

        /**
         * 压缩单个文件
         * @method zip_file
         * @param  string   $filename 文件名
         * @return boolean             true|false
         */
        function zip_file(string $filename){
          if(!is_file($filename)){
            return false;
          }
          $zip=new ZipArchive();
          $zipName=basename($filename).'.zip';
          //打开指定压缩包,不存在则创建,存在则覆盖
          if($zip->open($zipName,ZipArchive::CREATE|ZipArchive::OVERWRITE)){
            //将文件添加到压缩包中
            if($zip->addFile($filename)){
              $zip->close();
              @unlink($filename);
              return true;
            }else{
              return false;
            }
          }else{
            return false;
          }
        }
        // var_dump(zip_file('22.txt'));
        // func_get_args
        // test1.zip
    
    
    
        /**
         * 多文件压缩
         * @method zip_files
         * @param  string    $zipName 压缩包的名称,.zip结尾
         * @param  string     $files   需要压缩文件名,可以是多个
         * @return boolean             true|false
         */
        function zip_files(string $zipName,...$files){
          //检测压缩包名称是否正确
          $zipExt=strtolower(pathinfo($zipName,PATHINFO_EXTENSION));
          if('zip'!==$zipExt){
            return false;
          }
          $zip=new ZipArchive();
          if($zip->open($zipName,ZipArchive::CREATE|ZipArchive::OVERWRITE)){
            foreach($files as $file){
              if(is_file($file)){
                $zip->addFile($file);
              }
            }
            $zip->close();
            return true;
          }else{
            return false;
          }
        }
        // var_dump(zip_files('test1.zip','22.txt'));
        // var_dump(zip_files('test2.zip','doUpload.php','downLoad.html','upload.html'));
    
    
    
            /**
             * 解压缩
             * @method unzip_file
             * @param  string     $zipName 压缩包名称
             * @param  string     $dest    解压到指定目录
             * @return boolean              true|false
             */
            function unzip_file(string $zipName,string $dest){
              //检测要解压压缩包是否存在
              if(!is_file($zipName)){
                return false;
              }
              //检测目标路径是否存在
              if(!is_dir($dest)){
                mkdir($dest,0777,true);
              }
              $zip=new ZipArchive();
              if($zip->open($zipName)){
                $zip->extractTo($dest);
                $zip->close();
                return true;
              }else{
                return false;
              }
            }
            // var_dump(unzip_file('test2.zip','a'));

    $_FILES 参数详解:
    $_FILES["file"]["name"] – 被上传文件的名称
    $_FILES["file"]["type"] – 被上传文件的类型
    $_FILES["file"]["size"] – 被上传文件的大小,以字节计
    $_FILES["file"]["tmp_name"] – 存储在服务器的文件的临时副本的名称
    $_FILES["file"]["error"] – 由文件上传导致的错误代码



    $_FILES["file"]["error"]中的["error"]值情况:
    UPLOAD_ERR_OK
    0:没有错误发生,文件上传成功
    UPLOAD_ERR_INI_SIZE
    1:上传的文件超过了 php.ini 中 upload_max_filesize(默认情况为 2M) 选项限制的值
    UPLOAD_ERR_FORM_SIZE
    2:上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值
    UPLOAD_ERR_PARTIAL
    3:文件只有部分被上传
    UPLOAD_ERR_NO_FILE
    4:没有文件被上传
    5:传文件大小为 0

  • 相关阅读:
    平稳退化,JS和HTML标记分离,极致性能的JavaScript图片库
    简单选择排序(Simple Selection Sort)的C语言实现
    堆排序(Heap Sort)的C语言实现
    快速排序(Quick Sort)的C语言实现
    希尔排序(Shell's Sort)的C语言实现
    2-路插入排序(2-way Insertion Sort)的C语言实现
    折半插入排序(Binary Insertion Sort)的C语言实现
    直接插入排序(Straight Insertion Sort)的C语言实现
    栈的链式存储方法的C语言实现
    栈的顺序存储方式的C语言实现
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12180128.html
Copyright © 2011-2022 走看看