毎日の開発では、ZIP圧縮ファイルを使用して、ストレージスペースとトランスミッション帯域幅を保存することがよくあります。圧縮性能を評価するには、圧縮パッケージ内の各ファイルの圧縮率を理解することが特に重要です。 PHPは強力なZiparchiveクラスを提供し、それで簡単にこれを達成できます。
まず、 ziparchiveインスタンスを作成し、zipファイルを開く必要があります。
$zip = new ZipArchive;
$zipFile = 'path/to/archive.zip';
if ($zip->open($zipFile) === true) {
// 後続の圧縮率分析ロジック
} else {
echo '開くことができません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();
上記のコードでは、すべてのファイルの圧縮の前後の累積サイズを表す、それぞれ2つの合計変数$ totalsizebebebefeberと$ totalsizefterを維持します。横断プロセス中に、各ファイルの圧縮速度が計算され、最後に全体の平均圧縮効果が得られます。
この方法は、既存のZIPファイルの内容の分析にのみ適していることに注意してください。 ZIPを生成するときにリアルタイムで圧縮率を取得する場合は、最初にFile_Get_Contentsを介してファイルの内容を読み取り、次にGZCompressで圧縮をシミュレートして圧縮効率を推定できます。
PHPに付属するZiparchiveクラスを使用すると、ZIP圧縮パッケージのファイル圧縮率をすばやく表示できます。これは、圧縮アルゴリズムのパフォーマンスの評価、圧縮ロジックの最適化、およびリソースの節約に非常に役立ちます。プロジェクトにこの要件がある場合は、上記の方法を試して実装することもできます。