php打包文件夹zip下载

需要用到php扩展ZipArchive

官网下载 https://windows.php.net/downloads/pecl/releases/zip/

我是   php5.6  nts版本  64位windows系统(linux不用dll)  ,下载之后把php_zip.dll丢进php目录下ext文件夹里

在php.ini中添加一行extension=php_zip.dll重启nginx即可

代码部分

$zip = new ZipArchive();
copy('temp.zip','images.zip');
if ($zip->open('images.zip', ZipArchive::OVERWRITE) === TRUE) {
    addFileToZip('sucai/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
    
    download_unlick_zip('images.zip');
}


function download_unlick_zip($file_name){
    $fp = fopen($file_name,"r");
    $file_size = filesize($file_name);//获取文件的字节

    //下载文件需要用到的头 
    Header("Content-type: application/octet-stream"); 
    Header("Accept-Ranges: bytes"); 
    Header("Accept-Length:".$file_size);
    Header("Content-Disposition: attachment; filename=$file_name"); 
    $buffer=1024; //设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器) 
    $file_count=0; //读取的总字节数 
    //向浏览器返回数据 如果下载完成就停止输出,如果未下载完成就一直在输出。根据文件的字节大小判断是否下载完成
    while(!feof($fp) && $file_count<$file_size){  
        $file_con=fread($fp,$buffer);  
        $file_count+=$buffer;  
        echo $file_con;  
    } 
    fclose($fp); 
    
    //下载完成后删除压缩包,临时文件夹 
    if($file_count >= $file_size){ 
        unlink($file_name);
    }
}

function addFileToZip($path, $zip) {
    $handler = opendir($path); //打开当前文件夹由$path指定。

    while (($filename = readdir($handler)) !== false) {
        if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path . "/" . $filename, $zip);
            } else {     
                //将文件加入zip对象
                $zip->addFile($path . "/" . $filename);
            }
        }
    }
    @closedir($path);
}

猜你喜欢

转载自www.cnblogs.com/longzhankunlun/p/10911670.html
今日推荐