PHPでは、ZIPファイルを処理する場合、 ZIP_READ関数を使用して、ZIPファイルのすべてのファイルエントリを読み取ることができます。この関数を通じて、zipファイルのコンテンツを1つずつ読み取り、暗号化やキャッシュ操作などの読み取りコンテンツを一時的に処理できます。この記事では、 ZIP_READ関数と組み合わせてこれらの関数を実装する方法を詳細に紹介します。
ZIP_READ関数を使用する前に、PHPがZIP拡張機能をインストールして有効にしていることを確認する必要があります。あなたはそれを確認することができます:
<?php
if (class_exists('ZipArchive')) {
echo "Zip拡張機能を有効にします";
} else {
echo "有効にしてくださいZip拡張";
}
?>
ZIP_READ関数は、ZIPリソースの次のエントリを読み取るために使用されます。 zip_openおよびzip_entry_readと併せて、zipファイルのすべてのファイルをトラバースすることができます。
典型的な使用例は次のとおりです。
<?php
$zip = zip_open('http://m66.net/path/to/file.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
$name = zip_entry_name($entry);
zip_entry_open($zip, $entry);
$content = zip_entry_read($entry, zip_entry_filesize($entry));
zip_entry_close($entry);
// ここでは大丈夫です$content処理を実行します,たとえば、暗号化またはキャッシュ
}
zip_close($zip);
}
?>
読んだものについて簡単なAES暗号化を実行したいとします。サンプルコードは次のとおりです。
<?php
$cacheDir = '/tmp/zip_cache/';
if (!is_dir($cacheDir)) {
mkdir($cacheDir, 0755, true);
}
$zip = zip_open('http://m66.net/path/to/file.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
$name = zip_entry_name($entry);
$cacheFile = $cacheDir . md5($name) . '.cache';
if (file_exists($cacheFile)) {
$content = file_get_contents($cacheFile);
} else {
zip_entry_open($zip, $entry);
$content = zip_entry_read($entry, zip_entry_filesize($entry));
zip_entry_close($entry);
file_put_contents($cacheFile, $content);
}
// ここ$contentつまり、キャッシュされたコンテンツです,処理を継続できます
}
zip_close($zip);
}
?>