當前位置: 首頁> 最新文章列表> 【PHP使用ZipArchive查看壓縮包中文件壓縮率的實現方法】

【PHP使用ZipArchive查看壓縮包中文件壓縮率的實現方法】

M66 2025-06-22

PHP中如何使用ZipArchive查看壓縮包內各文件的壓縮率

在日常開發中,我們經常使用ZIP壓縮文件來節省存儲空間和傳輸帶寬。為了評估壓縮效果,了解每個文件在壓縮包中的壓縮率尤為重要。 PHP提供了強大的ZipArchive類,借助它我們可以輕鬆實現這一目標。

打開ZIP文件並初始化ZipArchive對象

首先需要創建ZipArchive實例,並打開一個ZIP文件:

 
$zip = new ZipArchive;
$zipFile = 'path/to/archive.zip';

if ($zip->open($zipFile) === true) {
    // 後續壓縮率分析邏輯
} else {
    echo '無法打開ZIP文件';
}

遍歷ZIP中的文件併計算壓縮率

打開ZIP文件後,可以通過遍歷其中的每個文件,獲取其原始大小和壓縮後的大小,進而計算壓縮率:

 
$totalSizeBefore = 0;
$totalSizeAfter = 0;

for ($i = 0; $i < $zip->numFiles; $i++) {
    $fileName = $zip->getNameIndex($i);
    $stat = $zip->statIndex($i);
    $sizeBefore = $stat['size'];
    $sizeAfter = $stat['comp_size'];

    $totalSizeBefore += $sizeBefore;
    $totalSizeAfter += $sizeAfter;

    $compressionRate = ($sizeBefore - $sizeAfter) / $sizeBefore * 100;

    echo "文件名:{$fileName}<br/>";
    echo "壓縮前大小:{$sizeBefore} bytes<br/>";
    echo "壓縮後大小:{$sizeAfter} bytes<br/>";
    echo "壓縮率:{$compressionRate}%<br/>";
    echo "<br/>";
}

$averageCompressionRate = ($totalSizeBefore - $totalSizeAfter) / $totalSizeBefore * 100 / $zip->numFiles;

echo "总壓縮前大小:{$totalSizeBefore} bytes<br/>";
echo "总壓縮後大小:{$totalSizeAfter} bytes<br/>";
echo "平均壓縮率:{$averageCompressionRate}%<br/>";

$zip->close();

邏輯說明與適用範圍

上述代碼中,我們維護了兩個總量變量$totalSizeBefore$totalSizeAfter ,分別代表所有文件壓縮前後的累計大小。在遍歷過程中,計算每個文件的壓縮率,並在最後得出整體的平均壓縮效果。

需要注意的是,該方法僅適用於分析已存在的ZIP文件內容。如果你想在生成ZIP時實時獲取壓縮率,可以先通過file_get_contents讀取文件內容,然後用gzcompress進行模擬壓縮,從而預估壓縮效率。

總結

使用PHP自帶的ZipArchive類可以快速實現對ZIP壓縮包中文件壓縮率的查看。這對於評估壓縮算法的性能、優化壓縮邏輯以及節省資源都非常有幫助。如果你在項目中有這方面的需求,不妨嘗試以上方法進行實現。