php压缩文件夹并下载

PHP技术
371
0
0
2022-12-10
public function zipDown()
{
    $path="./upload/img";//要压缩的文件的绝对路径 
    $filename='ceshi';   //生成压缩文件名 
    $this->create_zip($path,$filename);
    if(!file_exists('./' . $filename . '.zip')){
    echo 1;die;
    }
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename=' . basename($filename . '.zip')); //文件名 
    header("Content-Type: application/zip"); //zip格式的 
    header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件 
    header('Content-Length: ' . filesize('./' . $filename. '.zip')); //告诉浏览器,文件大小
    @readfile('./' . $filename . '.zip');//下载到本地
    @unlink('./' . $filename . '.zip');//删除服务器上生成的这个压缩文件
}


function create_zip($path,$filename){
    $zip = new \ZipArchive();
    if($zip->open($filename.'.zip', \ZipArchive::CREATE |\ZipArchive::OVERWRITE))       {
        $this->addFileToZip($path, $zip);//调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法 
        $zip->close();//关闭处理的zip文件
    }
}

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->addFile($path."/".$filename);
            }
        }
    }
    @closedir($path);
}