thinkphp压缩文件

<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
use think\ZipArchive;
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2022 All rights reserved.
// +----------------------------------------------------------------------
// | Author: 作者@梦雨 <50361804@qq.com>
// +----------------------------------------------------------------------
class Path extends Controller
{
    public function _initialize()
    {
        //code
    }
    /**
     * 压缩一个目录
     * @param $path 文件夹路径
     * @param $zip zip 对象
     */
    public function addFileToZip($path, $zip) {
        $handler = opendir($path); //打开当前文件夹由$path指定。
 
        while (($filename = readdir($handler)) !== false) {
            if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作
                if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
 
                    $this->addFileToZip($path . "/" . $filename, $zip);
                } else { //将文件加入zip对象
                    $zip->addFile($path . "/" . $filename);
                }
            }
        }
        @closedir($path);
    }
    public function index() {
        $zip = new \ZipArchive;
        $zipName='dow.zip';
        try {
            $zip->open($zipName, \ZIPARCHIVE::CREATE);
            $this->addFileToZip('app/user', $zip);
            $zip->close(); 
        } catch (\Exception $exception) {
            return $exception->getMessage();
        }
        if(!file_exists($zipName)){
            exit("无法找到文件");
        }
        //下载
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header('Content-disposition: attachment; filename='.basename($zipName)); //文件名
        header("Content-Type: application/zip"); //zip格式的
        header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
        header('Content-Length: '. filesize($zipName)); //告诉浏览器,文件大小
        @readfile($zipName);
        //删除zip文件
        unlink($zipName);
    }
 
   
}


分类: PHP 点赞(0) 收藏

评论