PHPで圧縮ファイルを処理する場合、 zip_read()とzip_entry_read()は、zipファイルのコンテンツを読むのに役立つ2つの非常に便利な関数です。この記事では、これら2つの機能を組み合わせて使用して、ZIP圧縮パッケージアイテムの各エントリのコンテンツをアイテムごとに読み取り、出力する方法について詳しく説明します。
zip_read(リソース$ zip)
この関数は、オープンなZIPリソースを受け入れ、ZIPエントリを指すリソースを返し、ZIPの現在のエントリを表します。すべてのエントリが読み取られた場合、 falseが返されます。
zip_entry_read(リソース$ zip_entry、int $ len = 1024)
この関数は、指定された長さの現在のzipエントリの内容を読み取ります。現在のzipエントリによって読み取られるリソースとバイト数を渡す必要があります。
次のサンプルコードは、zipファイルを開き、すべてのエントリを反復し、各エントリのコンテンツを出力する方法を示しています。
<?php
// Aを開きます Zip 書類,パスの例:http://m66.net/example.zip
$zip = zip_open('http://m66.net/example.zip');
if (!$zip) {
echo "開くことができません Zip 書類。";
exit;
}
// トラバーサル Zip すべてのエントリ
while ($zip_entry = zip_read($zip)) {
// エントリ名を取得します
$entry_name = zip_entry_name($zip_entry);
echo "エントリを読んでください: $entry_name\n";
// 現在のエントリを開いてコンテンツを読み取ります
if (zip_entry_open($zip, $zip_entry)) {
$content = '';
// 循环エントリを読んでください内容,一度に読むには大きすぎるコンテンツを避けてください
while ($data = zip_entry_read($zip_entry, 1024)) {
$content .= $data;
}
// 出力エントリコンテンツ
echo "コンテンツは次のとおりです:\n";
echo $content . "\n";
// 現在のエントリを閉じます
zip_entry_close($zip_entry);
} else {
echo "開くことができません条目 $entry_name 読み取りを実行します。\n";
}
echo "------------------------\n";
}
// 閉鎖 Zip リソース
zip_close($zip);
?>
ZIP_OPEN()関数は、ZIPファイルを開き、ローカルパスをサポートするか、リモートURLにするために使用されます(例のhttp://m66.net/example.zipなど)。
zip_read()ループを介して各エントリを読み取ります。
各エントリでzip_entry_open()を呼び出して開き、 zip_entry_read()を使用してコンテンツを読み取ります。ここでは、コンテンツが終了するまで1024バイトが一度に読み取られ、ループが表示されます。
読んだ後、エントリを閉じて、最後にzipファイルリソース全体を閉じます。
PHPのZIP_READ関数は、 ZIP拡張機能に依存して、環境で拡張機能が有効になっていることを確認します。
リモートURLアクセスには、 Allow_url_fopenをサポートするためにサーバーが必要です。
大きなファイルの場合、メモリオーバーフローを避けるために、読み取りブロックサイズを合理的に制御することをお勧めします。
この方法は、テキストファイルまたは小さなバイナリファイルの読み取りに適しています。複雑なZIP操作については、 Ziparchiveクラスの使用を検討できます。