PHP实现zip压缩打包下载

先来看PHP实现文件及文件夹的zip压缩

这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On

代码如下:

    public function addFileToZip($path, $current, $zip) {
        // 打开文件夹资源
        $handler = opendir($path);
        // 循环读取文件夹内容
        while(($filename = readdir($handler)) !== false) {
            // 过滤掉Linux系统下的.和..文件夹
            if ($filename != '.' && $filename != '..') {
                // 文件指针当前位置指向的如果是文件夹,就递归压缩
                if (is_dir($path.'/'.$filename)) {
                    $this->addFileToZip($path.'/'.$filename, $filename, $zip);
                }else {
                    // 为了在压缩文件的同时也将文件夹压缩,可以设置第二个参数为文件夹/文件的形式,文件夹不存在自动创建压缩文件夹
                    $zip->addFile($path.'/'.$filename, $current.'/'.$filename);
                }
            }
        }
        @closedir($handler);
    }
    $zipName = 'your zip file path';
// 如果压缩文件不存在,就创建压缩文件
        if (! is_file($zipName)) {
            $fp = fopen($zipName, 'w');
            fclose($fp);
        }
        $zip = new \ZipArchive();
        // OVERWRITE选项表示每次压缩时都覆盖原有内容,但是如果没有那个压缩文件的话就会报错,所以事先要创建好压缩文件
        // 也可以使用CREATE选项,此选项表示每次压缩时都是追加,不是覆盖,如果事先压缩文件不存在会自动创建
        if ($zip->open($zipName, \ZipArchive::OVERWRITE) === true) {
        $current = 'uplaods/'; // 你要压缩的文件的主目录
$compress->addFileToZip($path, $current, $zip); $zip->close(); }else { exit('下载失败!'); }

在压缩完之后我们可能还需要下载,而且下载完之后还可以删除压缩文件。

代码如下:

class Download
{
    public static function downloadFile($filePath,$showName) {
        if (is_file($filePath)) {
            //打开文件
            $file = fopen($filePath,"r");
            //返回的文件类型
            Header("Content-type: application/octet-stream");
            //按照字节大小返回
            Header("Accept-Ranges: bytes");
            //返回文件的大小
            Header("Accept-Length: ".filesize($filePath));
            //这里设置客户端的弹出对话框显示的文件名
            Header("Content-Disposition: attachment; filename=".$showName);
            //一次性将数据传输给客户端
            //echo fread($file, filesize($filePath));
            //一次只传输1024个字节的数据给客户端
            //向客户端回送数据
            $buffer=1024;//
            //判断文件是否读完
            while (!feof($file)) {
                //将文件读入内存
                $file_data = fread($file, $buffer);
                //每次向客户端回送1024个字节的数据
                echo $file_data;
            }
            return true;
        }else {
            return false;
        }
    }
}


// 调用这个方法的部分
// 下载压缩后的文件
        if (! Download::downloadFile($zipName, $showName)) {
            return "<script>alert('下载失败!')</script>";
        }else {
            @unlink($zipName);
        }

 

以上的代码基本可以实现简单的打包下载功能。

转载于:https://www.cnblogs.com/wp1996/p/9005797.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值