現在の位置: ホーム> 最新記事一覧> zip_openを使用してzip_readを使用してzipファイルの各エントリを読み取る方法は?

zip_openを使用してzip_readを使用してzipファイルの各エントリを読み取る方法は?

M66 2025-06-23

PHPでのzip圧縮パッケージの処理は、特にユーザーまたはパックされたデータファイルによってアップロードされた圧縮ファイルを処理する場合、非常に一般的なタスクです。 Ziparchiveは最新のPHPで推奨される操作クラスですが、 ZIP_OPENZIP_READなどの関数は、特定の特定のシナリオまたはPHPの古いバージョンで依然として広く使用されています。この記事では、 zip_openzip_readを介してzipファイルのすべてのエントリを通過して読み取る方法を紹介します。

基本機能の紹介

PHPは、以下を含むZIPファイルを操作するための一連の根本的な関数を提供します。

  • Zip_open($ filename) :zipファイルを開き、zipハンドルを返します。

  • zip_read($ zip) :次のエントリを読んで、エントリリソースを返します。

  • zip_entry_name($ entry) :エントリの名前を取得します。

  • zip_entry_open($ zip、$ entry) :エントリを開きます。

  • zip_entry_read($ entry、$ length) :開いたエントリのコンテンツを読み取ります。

  • zip_entry_close($ entry) :現在開いているエントリを閉じます。

これらの機能により、各圧縮パッケージのファイルにストリーミング方法でアクセスできます。

サンプルコード

これらの関数を使用してzipファイルのすべてのエントリを読み取る方法を示す完全な例を次に示します。

<code> $ zipfile = '/path/to/your/archive.zip';

$ zip = zip_open($ zipfile);

if(is_resource($ zip)){
while($ entry = zip_read($ zip)){
$ entryName = zip_entry_name($ entry);
エコー「読書エントリ:」。 $ entryName。 php_eol;

     if (zip_entry_open($zip, $entry, "r")) {
        $content = '';
        while ($buffer = zip_entry_read($entry, 1024)) {
            $content .= $buffer;
        }

        echo "コンテンツは次のとおりです:" . PHP_EOL;
        echo $content . PHP_EOL;

        zip_entry_close($entry);
    } else {
        echo "エントリを開くことができません: " . $entryName . PHP_EOL;
    }
}
zip_close($zip);

} それ以外 {
エコー「zipファイルを開くことはできません。」 。 php_eol;
}
</code>

シナリオを使用します

  • ユーザーのアップロードの解釈圧縮パッケージ:たとえば、ユーザーが複数の写真またはテキストファイルを圧縮パッケージとしてアップロードする場合、上記の方法を使用して各ファイルのコンテンツを読み取り、サーバーに保存できます。

  • バッチ構成ファイルの読み取り:一部の自動展開システムは、複数の構成ファイルをzipにパッケージ化し、必要な情報を通過することで抽出できます。

  • データの移行とバックアップ回復:バックアップ圧縮ファイルの各データ項目を読み取り、ターゲットシステムに書き込みます。

注意すべきこと

  1. ZIP_OPEN関連の関数は、PHPのZIP拡張によって提供されており、PHP環境で拡張機能が有効になっていることを確認する必要があります。

  2. これらの機能は、単純な圧縮パッケージ処理に適しており、暗号化された圧縮パッケージまたは複雑な構造にはZiparchiveが推奨されます。

  3. ZIP_ENTRY_READのデフォルトの最大読み取り長は、過度のメモリオーバーヘッドを防ぐために1024またはその他の適切な値に設定することをお勧めします。

  4. ユーザーがアップロードしたファイルの場合、ZIPデバイス攻撃(ZIP Slip)を防ぐために、パスとコンテンツの処理に注意してください。

実用的なアプリケーションの例

フロントエンドからサーバーアドレスにアップロードされた圧縮パケットがあるとします。

<code> https://m66.net/uploads/data.zip </code>

ローカルに保存し、このコードを使用して処理し、圧縮パッケージのコンテンツを分類または保存できます。

要約します

ZIP_OPENおよびZIP_READを使用すると、PHPは、ZIPファイルに1つずつエントリを通過するための低レベルで柔軟な方法を提供します。 Ziparchiveは現代の開発でより推奨されますが、これらの基本的な機能は特定の特定の環境で依然として実用的な価値があります。それがどのように機能するかを理解することは、圧縮されたファイルを処理するときに、より多くの制御と柔軟性を得るのに役立ちます。