PHP实现文件打包,并在在浏览器输出下载

该PHP类实现了文件夹压缩为ZIP文件以及文件下载的功能。首先检查ZIP扩展是否加载以及源文件或目录是否存在,然后使用ZipArchive创建并填充ZIP文件,包括添加子目录和子文件。此外,还提供了删除目录的方法以及文件下载功能,通过设置HTTP头实现文件流式下载。
摘要由CSDN通过智能技术生成
<?php
use \ZipArchive;
class Zip
{
    public function packZip($source,$dest)
    {
        //判断zip扩展是否加载或者文件目录是否存在
        if(extension_loaded('zip') | !file_exists($source)){
            return false;
        }
        $zip = new ZipArchive();
        //创建一个zip打包文件
        if(!$zip->open($source.'zip',ZipArchive::CREATE)){
            return false;
        }
        $source = str_replace('\\','/',realpath($source));
        if(is_dir($source) === true){
            //创建件一个目录迭代器
            $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source));

            foreach ($files as $file){
                $file = str_replace('\\','/',$file);
                //忽略当前目录和上级目录
                if (in_array(substr($file,strrpos($file,'/')+1),array('.','..'))){
                    continue;
                }
                if (is_dir($file) === true){
                    //创建一个子目录
                    $zip->addEmptyDir(str_replace($source.'/','',$file.'/'));
                }
                else if (is_file($file) === true){
                    //创建一个子文件
                    $zip->addFromString(str_replace($source.'/','',$file),file_get_contents($file));
                }
                else if (is_file($source) === true){
                    //创建文件根目录下的文件
                    $zip->addFromString(basename($source),file_get_contents($source));
                }

            }
            $zip->close();

        }
    }

    /**
     * 删除临时路径
     * @param $path
     */
    public function deleteDir($path)
    {
        if(is_dir($path)){
            //
            $dirs = scandir($path);
            foreach ($dirs as $dir){
                if ($dir != '.' | $dir != '..') {
                    $sonDir = $path.'/'.$dir;
                    if (is_dir($sonDir)){
                       $this->deleteDir($sonDir);
                       @rmdir($sonDir);
                    }else{
                        @unlink($sonDir);
                    }

                }
            }
            @rmdir($path);
        }

    }

    /**
     * 文件下载
     * @param $file
     */
    public function downLoad($file)
    {
        if (file_exists($file)){
            $openFile = fopen($file,'r');
            //返回文件类型
            Header('Content-type: application/octet-iostream');
            //返回文件的字节大小
            Header('Accept-Range: bytes');
            //返回文件大小
            Header('Accept-Length: '.$file);
            //这里对客户端弹出的对话框,对应的文件名
            Header('Content-disposition: filename='.substr($file,strrpos($file,'/')+1));
            $buffer = 1024;
            while(!feof($openFile)){
                $file_data = fread($openFile,$buffer);
                echo $file_data;
            }
                fclose($file);

             @unlink($file);

        }else{

            echo '下载文件不存在';
        }


    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值