PHPでZIPファイルを使用する場合、圧縮パッケージのすべてのエントリを通過する必要があることがよくあります。 PHPはzip_entry_read()を使用してzip_read()関数を提供してzipファイルの内容を読み取りますが、実際の操作では、最後のエントリが読み取られたかどうかを判断する方法は一般的な問題です。
この記事では、PHPのZIP拡張機能とZIP_READ()関数を使用して、圧縮パッケージ内のすべてのエントリが読み取られているかどうかを判断する方法について詳しく説明します。
まず、 zip_open()を使用してzipファイルを開き、リソースハンドルを返し、 zip_read()を介して各エントリオブジェクトを取得する必要があります。例は次のとおりです。
$zip = zip_open("http://m66.net/path/to/yourfile.zip");
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
echo "エントリを読んでください: " . zip_entry_name($entry) . "\n";
// エントリを読んでくださいコンテンツ
if (zip_entry_open($zip, $entry)) {
$content = zip_entry_read($entry, zip_entry_filesize($entry));
echo $content;
zip_entry_close($entry);
}
}
zip_close($zip);
} else {
echo "開ける ZIP ファイルが失敗しました";
}
上記のコードでは、各エントリがwhile($ entry = zip_read($ zip))で順番に取得され、ループの最後はすべてのエントリが読み取られていることを意味します。
zip_read()次のエントリリソースを返します。 falseが返された場合、エントリがもうないことを意味します。実際、 zip_read()の返品値がfalseであるかどうかを直接決定することは、すべてのエントリが読み取られているかどうかを判断することです。
例:
$zip = zip_open("http://m66.net/path/to/yourfile.zip");
if (is_resource($zip)) {
while (($entry = zip_read($zip)) !== false) {
echo "現在のエントリ: " . zip_entry_name($entry) . "\n";
// エントリのコンテンツを処理します
}
echo "すべてのエントリが読まれました。\n";
zip_close($zip);
}
このコードでは、 zip_read()がfalseを返すと、プログラムはすべてのエントリが横断されていると考えることができます。
ZIPファイルのすべてのエントリを読み取り、名前とコンテンツを出力するデモは次のとおりです。
<?php
$zipFile = "http://m66.net/files/example.zip";
$zip = zip_open($zipFile);
if (!is_resource($zip)) {
die("无法開ける ZIP 書類:$zipFile\n");
}
while (($entry = zip_read($zip)) !== false) {
$entryName = zip_entry_name($entry);
echo "エントリ名: $entryName\n";
if (zip_entry_open($zip, $entry)) {
$entrySize = zip_entry_filesize($entry);
$content = zip_entry_read($entry, $entrySize);
echo "コンテンツ:\n$content\n";
zip_entry_close($entry);
} else {
echo "无法開ける条目: $entryName\n";
}
}
echo "すべてのエントリが読まれました。\n";
zip_close($zip);
?>
zip_read()は、呼び出されるたびに次のzipエントリリソースを返し、すべてのエントリを読んだ後にfalseを返します。
最後のエントリが読み取られているかどうかを判断するには、 zip_read()の返品値がfalseかどうかを確認してください。
zip_entry_open()とzip_entry_read()を組み合わせることで、エントリコンテンツを読み取ることができます。
上記の方法を使用して、ZIPファイルのすべてのエントリを効率的かつ正確に通過させ、読み取りの進捗を判断できます。