當前位置: 首頁> 最新文章列表> zip_entry_compressedsize() 怎麼用?搭配zip_read 函數讀取壓縮文件的實用技巧

zip_entry_compressedsize() 怎麼用?搭配zip_read 函數讀取壓縮文件的實用技巧

M66 2025-06-26

在處理ZIP 壓縮文件時,PHP 提供了一套非常方便的函數接口, zip_entry_compressedsize()就是其中一個可以幫助開發者讀取壓縮文件中“已壓縮數據大小”的函數。本文將結合zip_read()函數,演示如何有效地讀取壓縮文件內容以及相關的壓縮信息。

一、什麼是zip_entry_compressedsize()

zip_entry_compressedsize()是用於獲取ZIP 文件中單個條目的壓縮後大小的函數。該函數接收由zip_read()返回的資源句柄作為參數,並返回對應壓縮條目的壓縮後大小(以字節為單位)。

函數原型如下:

 int zip_entry_compressedsize(resource $zip_entry)

該函數的典型用途是在遍歷壓縮文件條目時,獲取每個文件在壓縮後的字節數,從而用於分析壓縮率、評估性能或者預分配緩存。

二、與zip_read() 配合使用的完整示例

我們以下面這段代碼為例,展示如何打開一個ZIP 文件,逐個讀取條目,並獲取每個文件的壓縮大小。

 $zipPath = '/path/to/example.zip';

$zip = zip_open($zipPath);
if (is_resource($zip)) {
    while ($zip_entry = zip_read($zip)) {
        echo "文件名: " . zip_entry_name($zip_entry) . "\n";
        echo "壓縮後大小: " . zip_entry_compressedsize($zip_entry) . " 位元組\n";
        echo "原始大小: " . zip_entry_filesize($zip_entry) . " 位元組\n";
        
        if (zip_entry_open($zip, $zip_entry)) {
            $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
            // 在此可對內容進行處理,例如保存或分析
            zip_entry_close($zip_entry);
        }
        
        echo "-----------------------------\n";
    }
    zip_close($zip);
} else {
    echo "無法打開 ZIP 文件。\n";
}

說明:

三、使用場景示例

1. 顯示壓縮比率

你可以通過壓縮前後的大小來計算壓縮率,例如:

 $compressed = zip_entry_compressedsize($zip_entry);
$original = zip_entry_filesize($zip_entry);
$rate = $original > 0 ? round(($compressed / $original) * 100, 2) : 0;
echo "壓縮率: $rate%\n";

2. 文件篩選與分類

根據壓縮大小可以快速篩選出大型文件或高壓縮比的文件:

 if (zip_entry_compressedsize($zip_entry) > 1024 * 100) {
    echo "這是一個大文件,壓縮後大於 100KB。\n";
}

四、實際案例:讀取遠程ZIP 文件中的內容

如果ZIP 文件是來自遠程,比如https://m66.net/files/archive.zip ,可以先用file_get_contents()下載到本地臨時目錄,再處理:

 $tempFile = tempnam(sys_get_temp_dir(), 'zip');
file_put_contents($tempFile, file_get_contents('https://m66.net/files/archive.zip'));

$zip = zip_open($tempFile);
if (is_resource($zip)) {
    // 後續邏輯同上
    zip_close($zip);
    unlink($tempFile);
}

五、注意事項

  • 該函數在某些老版本PHP 中存在兼容問題,推薦在PHP 7 以上使用ZipArchive類來代替zip_*系列函數,但在某些場景中zip_entry_compressedsize()更直觀。

  • 當處理含有大量條目的壓縮包時,建議進行內存管理和錯誤處理,以免造成資源洩露或服務器崩潰。

六、結語

通過zip_entry_compressedsize()zip_read()的搭配,開發者可以輕鬆讀取壓縮包中的詳細信息,適用於日誌分析、遠程數據包內容提取、在線解壓服務等多種應用。掌握這些基礎工具,能讓你在PHP 文件處理方面更加得心應手。