PHP在线压缩文件夹并下载

<?php
function createZip($openFile,$zipObj,$sourceAbso,$newRelat = '')  
{  
    while(($file = readdir($openFile)) != false)  
    {  
        if($file=="." || $file=="..")  
            continue;  
          
        /*源目录路径(绝对路径)*/  
        $sourceTemp = $sourceAbso.'/'.$file;  
        /*目标目录路径(相对路径)*/  
        $newTemp = $newRelat==''?$file:$newRelat.'/'.$file;  
        if(is_dir($sourceTemp))  
        {  
            //echo '创建'.$newTemp.'文件夹<br/>';  
            $zipObj->addEmptyDir($newTemp);/*这里注意:php只需传递一个文件夹名称路径即可*/  
            createZip(opendir($sourceTemp),$zipObj,$sourceTemp,$newTemp);  
        }  
        if(is_file($sourceTemp))  
        {  
            //echo '创建'.$newTemp.'文件<br/>';  
            $zipObj->addFile($sourceTemp,$newTemp);  
        }  
    }  
}  


//创建<span style="font-family: Arial, Helvetica, sans-serif;">ZipArchive对象</span> 
$exportPath='copy'; 
$filename=$exportPath.'.zip';
$zip = new ZipArchive();  
//参数1:zip保存路径,参数2:ZIPARCHIVE::CREATE没有即是创建  
if(!$zip->open($filename,ZIPARCHIVE::CREATE))  
{  
    echo "创建[exportPath.zip]失败<br/>";return;  
}  
//echo "创建[$exportPath.zip]成功<br/>";  
createZip(opendir($exportPath),$zip,$exportPath);  
$zip->close();  

header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.basename($filename)); //文件名 
header("Content-Type: application/zip"); //zip格式的 
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件 
header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小 
@readfile($filename);

?>

  

posted @ 2020-11-04 11:28  诔栩  阅读(374)  评论(0编辑  收藏  举报