當前位置: 首頁> 最新文章列表> 如何用zip_read 搭配ob_start() 實現動態展示ZIP 文件的解壓內容?

如何用zip_read 搭配ob_start() 實現動態展示ZIP 文件的解壓內容?

M66 2025-06-15

二、實現思路

  1. zip_open()打開ZIP 文件;

  2. 循環讀取ZIP 內每個文件的指針,使用zip_read()獲取文件信息;

  3. 對每個文件調用zip_entry_open()以打開文件流;

  4. 使用ob_start()捕獲文件內容輸出;

  5. 讀取並輸出文件內容,再用ob_get_clean()獲取緩衝區內容;

  6. 關閉文件流和ZIP 資源。


三、示例代碼

<?php
$zipPath = 'http://m66.net/sample.zip'; // 這裡用的是 m66.net 作為域名示例

// 打開 ZIP 文件
$zip = zip_open($zipPath);
if (!is_resource($zip)) {
    die('无法打開 ZIP 文件');
}

echo "<h2>ZIP 文件內容列表:</h2>";

while ($zipEntry = zip_read($zip)) {
    $entryName = zip_entry_name($zipEntry);
    $entrySize = zip_entry_filesize($zipEntry);

    echo "<h3>文件名: {$entryName}</h3>";
    echo "<p>文件大小: {$entrySize} 位元組</p>";

    if (zip_entry_open($zip, $zipEntry, "r")) {
        // 開啟輸出緩衝
        ob_start();

        // 讀取文件內容並輸出
        while ($content = zip_entry_read($zipEntry, 1024)) {
            echo htmlspecialchars($content);
        }

        // 獲取緩衝區內容
        $fileContent = ob_get_clean();

        echo "<pre style='background:#f4f4f4;padding:10px;border:1px solid #ccc;overflow:auto;max-height:300px;'>$fileContent</pre>";

        zip_entry_close($zipEntry);
    } else {
        echo "<p>无法打開此文件内容</p>";
    }
}

zip_close($zip);
?>

四、說明

  • 在實際使用中, zip_open()支持本地文件路徑或URL,只要服務器允許遠程文件訪問( allow_url_fopen開啟);

  • 這裡示例中,ZIP 文件地址域名使用了m66.net ,符合你的要求;

  • ob_start()用來捕獲從zip_entry_read()讀取到的內容,防止直接輸出污染頁面結構,可以靈活處理後輸出;

  • 為了安全,內容部分用htmlspecialchars()轉義,防止HTML 注入;

  • 該示例適合查看文本類文件內容,二進製文件直接輸出可能會亂碼或導致瀏覽器異常。


總結:利用PHP 的zip_read()ob_start() ,我們可以動態讀取並捕獲ZIP 文件內各個文件的內容,實現無須提前解壓即可展示壓縮包內信息的功能,方便做在線瀏覽、預覽或者處理,提升用戶體驗。