ホームページ  >  記事  >  バックエンド開発  >  PHP ZipArchive を使用して圧縮パッケージを分割およびマージするにはどうすればよいですか?

PHP ZipArchive を使用して圧縮パッケージを分割およびマージするにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-07-21 08:31:481699ブラウズ

PHP ZipArchive を使用して圧縮パッケージを分割およびマージするにはどうすればよいですか?

はじめに:
実際の開発プロセスでは、大きなファイルや多数のファイルを処理する必要がある場合がありますが、現時点では、ファイル コレクションを圧縮する方法が一般的です。ただし、場合によっては、システムの制限またはその他の理由により、大きな圧縮ファイルを複数の小さなファイルに分割したり、複数の小さな圧縮ファイルを 1 つの大きな圧縮ファイルにマージしたりすることが必要になることがあります。この記事では、PHP の ZipArchive ライブラリを使用して、圧縮パッケージに対するボリュームの分割と結合の操作を実装する方法を紹介します。

1. ボ​​リューム分割操作:
圧縮パッケージの分割操作を実現するには、次の手順を実行する必要があります:

  1. ZipArchive オブジェクトを作成します:
    まず、圧縮パッケージを開いて操作するための ZipArchive オブジェクトを作成する必要があります。オブジェクトを作成するときは、open メソッドを使用して新規または既存の圧縮ファイルを開く必要があります。
$zip = new ZipArchive;
$res = $zip->open('archive.zip', ZipArchive::CREATE);
if ($res === TRUE) {
    // Success
} else {
    // Failed
}
  1. ボリューム サイズの設定:
    ボリューム操作を実行する前に、ボリュームのサイズを設定する必要があります。必要に応じてサブボリュームのサイズを設定できます。単位は K、M、G などです。たとえば、ボリューム サイズを 100M に設定します:
$volume_size = 100; // 分卷大小(单位:M)
$volume_size_bytes = $volume_size * 1024 * 1024; // 分卷大小(字节数)
  1. ファイル リストを処理します:
    次に、圧縮するファイルのリストを取得し、圧縮形式に従ってファイルを分割する必要があります。ボリュームサイズ。 glob 関数を使用してディレクトリ内のファイル リストを取得し、array_chunk 関数を使用してファイル リストをボリューム サイズに応じて複数のサブ配列に分割できます。
$files = glob('path/to/files/*'); // 获取待压缩文件列表
$files_chunks = array_chunk($files, $volume_size_bytes); // 根据分卷大小划分文件数组
  1. ボリューム圧縮:
    これで、ボリューム圧縮操作を実行できるようになります。ファイル配列をループし、各サブ配列内のファイルを圧縮パッケージに順番に追加します。
$i = 1; // 计数器
foreach ($files_chunks as $chunk) {
    $zip->addFiles($chunk, 'volume_' . $i); // 添加文件到压缩包中,文件夹名为volume_1、volume_2...
    $i++;
}
  1. 圧縮パッケージを閉じます:
    すべてのボリューム分割操作が完了したら、close メソッドを呼び出して圧縮パッケージを閉じる必要があります。
$zip->close();

この時点で、圧縮パッケージのボリューム分割操作が完了しました。各ボリュームは指定されたサイズであり、正しく解凍して結合できます。

2. マージ操作:
圧縮パッケージのマージ操作を実装するには、次の手順を実行する必要があります:

  1. ZipArchive オブジェクトを作成します:
    同様に、圧縮アーカイブを開いて操作するために使用される ZipArchive オブジェクトを作成する必要があります。オブジェクトを作成するときは、open メソッドを使用して新しい圧縮ファイルを開きます。
$zip = new ZipArchive;
$res = $zip->open('merged.zip', ZipArchive::CREATE);
if ($res === TRUE) {
    // Success
} else {
    // Failed
}
  1. ボリューム ファイルのリストを取得する:
    マージ操作を実行する前に、まずボリューム ファイルのリストを取得する必要があります。 glob 関数を使用すると、ディレクトリ内のすべてのボリューム ファイルを取得できます。
$volume_files = glob('path/to/volumes/volume_*'); // 获取分卷文件列表
  1. 圧縮パッケージのマージ:
    これで、圧縮パッケージをマージできます。ボリューム ファイル リストをループし、各ボリューム ファイルの内容を解凍して、マージされた圧縮パッケージに追加します。
foreach ($volume_files as $volume_file) {
    $zip->open($volume_file); // 打开分卷压缩包
    $zip->extractTo('path/to/merge'); // 解压到指定目录
    $zip->close(); // 关闭压缩包
}
  1. マージされた圧縮パッケージを閉じます:
    すべてのマージ操作が完了したら、close メソッドを呼び出して、マージされた圧縮パッケージを閉じる必要があります。
$zip->close();

この時点で、圧縮パッケージのマージが完了しました。すべてのボリューム ファイルが正しく解凍され、単一のアーカイブにマージされました。

結論:
PHP の ZipArchive ライブラリを使用すると、圧縮パッケージの分割と結合操作を簡単に実現できます。上記の手順により、大きな圧縮ファイルを複数の小さなファイルに分割したり、複数の小さな圧縮ファイルを 1 つの大きな圧縮ファイルに結合したりできます。これは、大きなファイルまたは多数のファイルを操作する場合に便利です。この記事があなたの開発作業に役立つことを願っています。

以上がPHP ZipArchive を使用して圧縮パッケージを分割およびマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。