ZIP圧縮ファイルを処理するとき、PHPは非常に便利な機能インターフェイスを提供します。 zip_entry_compressedsize()は、開発者が圧縮ファイルの「圧縮データサイズ」を読むのに役立つ機能の1つです。この記事では、zip_read()関数を組み合わせて、圧縮ファイルと関連する圧縮情報のコンテンツを効果的に読み取る方法を示します。
zip_entry_compressedsize()は、zipファイル内の単一のエントリの圧縮サイズを取得するために使用される関数です。この関数は、ZIP_READ()によって返されたリソースハンドルをパラメーターとして取得し、対応する圧縮エントリの圧縮サイズ(バイト単位)を返します。
関数プロトタイプは次のとおりです。
int zip_entry_compressedsize(resource $zip_entry)
この関数の典型的な使用は、圧縮されたファイルエントリを繰り返すときに各ファイルの圧縮バイトの数を取得し、圧縮率を分析し、パフォーマンスを評価する、またはキャッシュを事前に割り当てることです。
次のコードを例として使用して、zipファイルを開き、エントリを1つずつ読み取り、各ファイルの圧縮サイズを取得します。
$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";
}
zip_open() :zipファイルを開きます。
zip_read() :zipから次のエントリ(ファイルまたはディレクトリ)をお読みください。
zip_entry_compressedsize() :エントリの圧縮サイズを取得します。
ZIP_ENTRY_FILESIZE() :エントリの元のサイズを取得します。
zip_entry_open()およびzip_entry_read() :ファイルコンテンツを読み取ります。
たとえば、圧縮の前後にサイズを圧縮することにより、圧縮速度を計算できます。
$compressed = zip_entry_compressedsize($zip_entry);
$original = zip_entry_filesize($zip_entry);
$rate = $original > 0 ? round(($compressed / $original) * 100, 2) : 0;
echo "圧縮率: $rate%\n";
圧縮サイズに応じて、大きなファイルまたは高圧縮比ファイルをすばやくフィルタリングできます。
if (zip_entry_compressedsize($zip_entry) > 1024 * 100) {
echo "这是一个大書類,圧縮後、より大きい 100KB。\n";
}
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の古いバージョンでは互換性の問題があります。 ZIP_*シリーズ関数を置き換えるためにPHP 7の上のZiparchiveクラスを使用することをお勧めしますが、いくつかのシナリオではZIP_ENTRY_COMPRESSTENSIZE()はより直感的です。
多数のエントリを含む圧縮パッケージを処理する場合、リソースの漏れやサーバーのクラッシュを避けるために、メモリ管理とエラー処理を実行することをお勧めします。
zip_entry_compressedsize()とzip_read()の組み合わせにより、開発者はログ分析、リモートパケットコンテンツ抽出、オンライン減圧サービス、その他のアプリケーションに適した圧縮パッケージで詳細情報を簡単に読み取ることができます。これらの基本的なツールを習得すると、PHPファイル処理が熟練します。