php壓縮文件zip格式並打包(單個或多個文件壓縮)


最近接到一個需求,就是選擇多個文件下載時,不要一個一個下載,直接把多個文件打包成一個文件進行下載。我們項目是前后端分離,所以我寫了個接口,讓前端傳參數,后台下載。

廢話不多說,直接上代碼:

先是壓縮單個文件的:

$zip = new ZipArchive;
$zip_time = time().".zip"; // 壓縮的目錄名
$zip_filename = $zip_time; // 指定一個壓縮包地址

$zip->open($zip_filename, ZIPARCHIVE::CREATE); // 打開壓縮包,沒有則創建

// 參數1是要壓縮的文件,參數2為壓縮后,在壓縮包中的文件名
//如果需要的壓縮后的文件跟原文件名一樣 addFile() 的第二個參數可以改為 basename("../alg/demo1.php"),也就是原文件所在的路徑
$zip->addFile("log.txt",basename("log.txt"));
$rs = $zip->close();
var_dump($rs);

  

多個文件下載打包成一個文件的:

<?php

function zipfile($file_path)
{
    // 壓縮多個文件
    $fileList = explode(',', $file_path);
    $filename = time() . ".zip"; // 壓縮包所在的位置路徑
    $zip = new ZipArchive();
    $zip->open($filename, ZipArchive::CREATE);   //打開壓縮包
    foreach ($fileList as $file) {
        $zip->addFile($file, basename($file));   //向壓縮包中添加文件
    }
    $rs = $zip->close();  //關閉壓縮包

    //下載文件
    $file = fopen($filename, "r");
    //返回的文件類型
    Header("Content-type: application/octet-stream");
    //按照字節大小返回
    Header("Accept-Ranges: bytes");
    //返回文件的大小
    Header("Accept-Length: " . filesize($filename));
    //這里設置客戶端的彈出對話框顯示的文件名
    Header("Content-Disposition: attachment; filename=" . $filename);
    //一次性將數據傳輸給客戶端
    //echo fread($file, filesize($filePath));
    //一次只傳輸1024個字節的數據給客戶端
    //向客戶端回送數據
    $buffer = 1024;//
    //判斷文件是否讀完
    while (!feof($file)) {
        //將文件讀入內存
        $file_data = fread($file, $buffer);
        //每次向客戶端回送1024個字節的數據
        echo $file_data;

    }
    //將生成的zip文件在服務器端刪除,只需要客戶端下載就行了
    @unlink($filename);

}

zipfile('D:\phpstudy_pro\WWW\log.txt,D:\phpstudy_pro\WWW\index.html');
前端傳的參數是以逗號分隔傳給我的路勁。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM