PHPでのZIPファイル、特に特定のタイプのファイル( .txtテキストファイルなど)を抽出することは、 Ziparchiveクラスまたは基礎となるZIP_READ関数を介して実行できます。 Ziparchiveはよりモダンで使いやすいですが、 ZIP_READは、一部の古いバージョンや特別なシナリオで依然として価値があります。この記事では、 zip_readを使用してzipファイルのすべての.txtファイルコンテンツを読み取る方法を紹介します。
まず、PHP環境でZIP拡張機能が有効になっていることを確認してください。次の行がphp.iniに含まれているかどうかを確認します。
extension=zip
次のPHPコードを実行して確認することもできます。
<?php
if (!function_exists('zip_open')) {
die("ZIP 拡張機能が有効になっていません!");
}
?>
zipファイルを開き、そのすべてのエントリを繰り返し、拡張機能.txtを使用したファイルの内容のみを読み取る方法を示す完全な例を示します。
<?php
$zipFile = '/path/to/archive.zip'; // 実際のパスに置き換えます
$zip = zip_open($zipFile);
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
$fileName = zip_entry_name($entry);
// プロセスのみ .txt 書類
if (pathinfo($fileName, PATHINFO_EXTENSION) === 'txt') {
if (zip_entry_open($zip, $entry, 'r')) {
echo "读取書類: $fileName\n";
$contents = zip_entry_read($entry, zip_entry_filesize($entry));
echo "コンテンツは次のとおりです:\n$contents\n\n";
zip_entry_close($entry);
}
}
}
zip_close($zip);
} else {
echo "開くことができません ZIP 書類。\n";
}
?>
パス検証: zip_entry_name()によって返されるファイルパスには、ディレクトリ構造が含まれているか、パストラバーサルを実行しようとする場合があります。セキュリティを使用するときは、必ずそのセキュリティを確認してください。
制限読み取りサイズ:一部の.txtファイルは非常に大きく、 zip_entry_read()の場合はメモリオーバーフローを防ぐために制限する必要があります。
エラー処理:上記のコードには、完全なエラー処理ロジックが含まれていません。生産環境の特定の状況に従って、ログと例外処理メカニズムを追加する必要があります。
ユーザーが複数の.TXTファイルを含むZIPパッケージをアップロードし、コンテンツの統計またはフォーマットの変換を実行できるオンラインバッチ処理プラットフォームを開発しているとします。上記の方法により、テキストコンテンツを簡単に抽出でき、その後の処理ロジックを呼び出すことができます。
このロジックをアップロード処理スクリプトに統合できます。たとえば、
$uploadedZip = $_FILES['file']['tmp_name'];
// 对上传書類进行检查后调用读取函数
processTxtFilesFromZip($uploadedZip);
アップロードフォームとセキュリティ検証関数を組み合わせて、簡単なzipファイル処理プラットフォームを構築できます。 https://m66.net/tools/zip-readerにアクセスして、このようなツールの実際のデモンストレーションとソースコード参照を取得します。
ZIP_READインターフェイスはZiparchiveよりも少し面倒ですが、ZIPファイルで微細な操作を実行する場合はまだ参照値です。 ZIP_READとZIP_ENTRY_*シリーズ関数を合理的に組み合わせることにより、さまざまな自動化処理やバックグラウンドバッチタスクの.TXTなどの特定のタイプのファイルを柔軟に読み取ることができます。