ZIPファイルをPHPで処理する場合、2つの関数ZIP_ENTRY_OPEN()とZIP_READ()がよく使用されます。これらはすべてPHPのZIP拡張機能の一部であり、主に圧縮パッケージのコンテンツを読むために使用されます。ただし、多くの開発者は、それを使用する際に呼び出しの順序について疑問を抱いています。最初にどの機能を呼び出す必要がありますか?この記事では、これら2つの機能の正しい使用順序と予防措置について詳しく説明します。
zip_read()
ZIPファイルの次のエントリを読むために使用されます。これは、圧縮パッケージ内のファイルを通過するのと同等です。
返品値はリソースタイプのzipエントリハンドルであり、最後まで読み取るとfalseが返されます。
zip_entry_open()
zip_read()が読み取るzipエントリを開くために使用して、その内容にアクセスできるようにします。
zip_entry_open()が呼び出された場合にのみ、 zip_entry_read()を使用してコンテンツを取得するなど、現在のエントリを読み取ることができます。
これら2つの関数を使用してzipファイルを操作するための正しい順序は次のとおりです。
$zip = zip_open('http://m66.net/path/to/yourfile.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) { // 最初に電話してください zip_read() 次のエントリを取得します
if (zip_entry_open($zip, $entry)) { // もう一度使用してください zip_entry_open() このエントリを開きます
$content = '';
while ($data = zip_entry_read($entry, 1024)) {
$content .= $data; // エントリコンテンツをお読みください
}
echo "Entry name: " . zip_entry_name($entry) . "\n";
echo "Content length: " . strlen($content) . "\n";
zip_entry_close($entry); // 現在のエントリを閉じます
}
}
zip_close($zip); // 閉鎖 ZIP リソース
}
総括する:
最初にzip_read()を呼び出して、zipパッケージの各ファイルエントリをトラバースします。
各エントリでzip_entry_open()を呼び出して開きます。
エントリコンテンツを読んでください。
エントリを閉じます。
すべてのエントリが横断されるまで。
ZIP_ENTRY_OPEN()は、コンテンツの読み取り用の現在のZIPエントリを開く関数ですが、最初にエントリリソースハンドルを取得する必要がある場合のみ、 ZIP_READ()を使用して取得します。
zip_entry_open()を最初に呼び出すと、エントリの生地がないため、関数が失敗し、エントリを開くことができません。
zip_read()の返品値がfalseであるかどうかについては判断は行われません
これにより、後続のZIP_ENTRY_OPEN()エラーが報告されます。周期的な構造検査を使用する必要があります。
エントリーまたはzipリソースが閉じていない<br> これにより、リソースの漏れとプログラムのパフォーマンスの劣化につながる可能性があります。
ファイルURLを使用してzipを直接読み取ります
PHP構成により、URLフォームのファイルを開くことができることを確認してください( Allow_url_fopenを有効にする必要があります)。
ZIP_READ()は、圧縮パッケージの次のファイルエントリを取得するために使用され、トラバーサルの開始点です。
zip_entry_open()は、zip_read()によって返されたエントリを開くために使用され、ファイルコンテンツを読み取る準備をします。
使用するときは、最初にzip_read()を呼び出してから、 zip_entry_open()を呼び出します。 2つを一緒に使用する場合にのみ、zipファイルのコンテンツを正しく読み取ることができます。
正しいコールオーダーを習得すると、一般的な間違いを避けて、zipファイルを効率的かつ安定して処理できます。