PHPでは、 ZIP_ENTRY_NAMEおよびZIP_ENTRY_READは、ZIPファイルの操作に使用される関数です。これら2つの関数を通じて、ZIPファイルの特定のコンテンツを読み取ることができます。この記事では、これら2つの機能の使用法を紹介し、実際のケースを組み合わせて、これら2つの機能を介してzipファイルのファイルコンテンツを読み取る方法を示します。
ZIPファイルは、複数のファイルとディレクトリを1つのファイルに圧縮して簡単に保存して転送するために使用される一般的な圧縮ファイル形式です。 ZIP形式は、ロスレス圧縮をサポートし、複数のタイプのファイルを含めることができます。 PHPでZIPファイルを操作するために、 Ziparchiveクラスを使用するか、基礎となるZIP_*シリーズ関数を使用してZIPファイルを直接処理できます。
ZIP_ENTRY_NAME関数は、ZIPファイルのエントリ(つまりファイル)の名前を取得するために使用されます。この関数は、 zip_read関数を使用して、zipファイルを呼び出す前にメモリへのファイルエントリを読み取る必要があります。
関数定義:
<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">zip_entry_name</span></span><span> ( resource </span><span><span class="hljs-variable">$zip_entry</span></span><span> )
</span></span>
パラメーター:
$ zip_entry : zip_read関数によって返されるエントリリソース。
返品値:
エントリの名前を示す文字列を返します。エラーが発生した場合、 falseが返されます。
ZIP_ENTRY_READ関数は、ZIPファイルのエントリのコンテンツを読み取るために使用されます。この関数は、さらに処理するためにファイルコンテンツを文字列に読み込むことができます。
関数定義:
<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">zip_entry_read</span></span><span> ( resource </span><span><span class="hljs-variable">$zip_entry</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> )
</span></span>
パラメーター:
$ zip_entry : zip_read関数によって返されるエントリリソース。
$の長さ:時間ごとに読み取られるバイトの最大数。通常、エントリのサイズに設定できます。
返品値:
読み取りコンテンツを表す文字列を返します。読み取りが失敗した場合、 falseが返されます。
zip_entry_nameとzip_entry_readを使用してzipファイルでコンテンツを読み取る方法を示す簡単な例を示します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 開けるZIP書類</span></span><span>
</span><span><span class="hljs-variable">$zip</span></span><span> = </span><span><span class="hljs-title function_ invoke__">zip_open</span></span><span>(</span><span><span class="hljs-string">'example.zip'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$zip</span></span><span>) {
</span><span><span class="hljs-comment">// トラバーサルZIP書類中的所有条目</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$zip_entry</span></span><span> = </span><span><span class="hljs-title function_ invoke__">zip_read</span></span><span>(</span><span><span class="hljs-variable">$zip</span></span><span>)) {
</span><span><span class="hljs-comment">// エントリの名前を取得します</span></span><span>
</span><span><span class="hljs-variable">$entry_name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">zip_entry_name</span></span><span>(</span><span><span class="hljs-variable">$zip_entry</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"正在读取書類: <span class="hljs-subst">$entry_name</span></span></span><span>\n";
</span><span><span class="hljs-comment">// エントリのサイズを取得します</span></span><span>
</span><span><span class="hljs-variable">$entry_size</span></span><span> = </span><span><span class="hljs-title function_ invoke__">zip_entry_filesize</span></span><span>(</span><span><span class="hljs-variable">$zip_entry</span></span><span>);
</span><span><span class="hljs-comment">// 读取書類内容</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">zip_entry_open</span></span><span>(</span><span><span class="hljs-variable">$zip</span></span><span>, </span><span><span class="hljs-variable">$zip_entry</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>)) {
</span><span><span class="hljs-comment">// 将書類内容读取到一个变量中</span></span><span>
</span><span><span class="hljs-variable">$file_content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">zip_entry_read</span></span><span>(</span><span><span class="hljs-variable">$zip_entry</span></span><span>, </span><span><span class="hljs-variable">$entry_size</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"書類内容: \n<span class="hljs-subst">$file_content</span></span></span><span>\n";
</span><span><span class="hljs-comment">// エントリを閉じます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">zip_entry_close</span></span><span>(</span><span><span class="hljs-variable">$zip_entry</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"无法開ける条目 <span class="hljs-subst">$entry_name</span></span></span><span>\n";
}
}
</span><span><span class="hljs-comment">// 閉鎖ZIP書類</span></span><span>
</span><span><span class="hljs-title function_ invoke__">zip_close</span></span><span>(</span><span><span class="hljs-variable">$zip</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"无法開けるZIP書類\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
zipファイルを開く: zip_openを使用してzipファイルを開き、リソースハンドルを返します。開口部が失敗した場合は、 falseを返します。
エントリの読み取り: zip_readは、zipファイルのエントリリソースを読み取るために使用されます。 Zip_readが呼び出されるたびに、次のエントリのリソースを返します。
エントリ名を取得: zip_entry_nameを使用して、現在のエントリの名前(つまり、ファイル名)を取得し、出力します。
エントリコンテンツを読む: zip_entry_open関数のエントリを開き、読みモード( Rは読み取りの略)を指定します。次に、 zip_entry_readを使用して、エントリのコンテンツを読み取ります。読み取りコンテンツは、ファイルへの印刷や保存など、直接処理できます。
閉鎖エントリ: ZIP_ENTRY_CLOSEは、エントリを閉じて関連するリソースをリリースするために使用されます。
zipファイルを閉じる: zipファイルの処理を完了したら、 zip_closeを使用してzipファイルを閉じてリソースをリリースします。
zip_entry_readによって読まれるコンテンツはByte Streamによって読み取られるため、着信$ lengthパラメーターが妥当であることを確認する必要があります。コンテンツの読み取りが比較的大きい場合は、バッチで読むのが最善です。
より大きなzipファイルを操作するときは、処理中にメモリオーバーフローが発生しないことを確認してください。多数のファイルを読み取る必要がある場合は、一度にコンテンツが多すぎることを避けるために、段階的に処理することをお勧めします。
zip_entry_nameとzip_entry_readは、2つの非常に実用的な関数です。それらは、zipファイルのエントリ名と特定のコンテンツを簡単に読み取ることができるように組み合わせて使用されます。圧縮パッケージを処理するとき、これらの2つの機能は低レベルの動作方法を提供し、実際のニーズに応じてファイルの内容を柔軟に読み取ることができます。