ビッグデータ時代の到来により、データ量は増加しており、データを送信および保存するためのより効率的な方法が必要です。ファイルの圧縮と解凍は非常に重要なテクノロジーの 1 つとなっており、PHP 言語ではファイルの圧縮と解凍を実現するための対応する API も提供されています。
1. ファイル圧縮方法
PHPではZipArchiveクラスを利用してZIP形式の圧縮ファイルを作成・操作することができます。 ZipArchive クラスは、圧縮ファイルを作成および操作するための次のメソッドを提供します。
ZipArchive::open() メソッドは、ZIP を開くために使用されます。ファイルの場合、パラメータはファイル名と操作タイプで、ZipArchive::CREATE (新しいファイルを作成する) または ZipArchive::OVERWRITE (既存のファイルを上書きする) にすることができます。
サンプル コードは次のとおりです。
$zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) { // 添加文件到压缩包 $zip->addFile('file1.txt'); $zip->addFile('file2.txt'); // 关闭压缩包 $zip->close(); }
ZipArchive::addFile() メソッドは、ファイルを追加するために使用されます。開いた ZIP ファイルにファイルを追加します。
サンプル コードは次のとおりです。
$zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) { $zip->addFile('file1.txt'); $zip->addFile('file2.txt'); $zip->close(); }
ZipArchive::addEmptyDir() メソッドが使用されます。開いている ZIP ファイルにディレクトリを追加するには ディレクトリを追加します。
サンプル コードは次のとおりです。
$zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) { $zip->addEmptyDir('dir1'); $zip->addFile('dir1/file1.txt'); $zip->addFile('dir1/file2.txt'); $zip->addEmptyDir('dir2'); $zip->close(); }
ZipArchive::addFromString() メソッドは、開かれた ZIP アーカイブにデータを追加するために使用されます。ZIP ファイルは、メモリ内のデータを追加します。
サンプルコードは以下の通りです:
$zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) { $zip->addFromString('file1.txt', 'this is a test file1'); $zip->addFromString('file2.txt', 'this is a test file2'); $zip->close(); }
2. ファイルの解凍方法
PHPではZipArchiveクラスを利用してZIP形式の圧縮ファイルを解凍することができます。 ZipArchive クラスは、ZIP ファイルを解凍するための次のメソッドを提供します。
ZipArchive::open() メソッドは、ZIP ファイルを開くために使用されます。パラメータはファイル名と操作タイプで、ZipArchive::CREATE (新しいファイルを作成する) または ZipArchive::OVERWRITE (既存のファイルを上書きする) です。
サンプル コードは次のとおりです。
$zip = new ZipArchive(); if ($zip->open('test.zip') === TRUE) { // 解压到指定目录 $zip->extractTo('./unzip'); // 关闭ZIP文件 $zip->close(); }
ZipArchive::extractTo() メソッドが使用されます。 ZIP ファイルを指定したディレクトリに抽出します。
サンプル コードは次のとおりです。
$zip = new ZipArchive(); if ($zip->open('test.zip') === TRUE) { $zip->extractTo('./unzip'); $zip->close(); }
ZipArchive::getStream() メソッドが使用されます。 ZIP ファイル内の指定されたファイルを取得する ファイルのデータ ストリームを使用して、ZIP ファイル内の指定されたファイルを解凍できます。
サンプル コードは次のとおりです:
$zip = new ZipArchive(); if ($zip->open('test.zip') === TRUE) { // 获取file1.txt的数据流 $stream = $zip->getStream('file1.txt'); // 读取数据流 $data = ''; while (!feof($stream)) { $data .= fread($stream, 1024); } fclose($stream); // 写入解压后的文件 file_put_contents('./unzip/file1.txt', $data); $zip->close(); }
3. 一般的な問題の解決策
// 修改ZIP文件名编码 $zipFilename = iconv('UTF-8', 'GBK', 'test.zip'); // 打开ZIP文件 $zip = new ZipArchive(); if ($zip->open($zipFilename) === TRUE) { // 解压ZIP文件 $zip->extractTo('./unzip'); // 关闭ZIP文件 $zip->close(); }
$zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) { $zip->addEmptyDir('dir1'); $zip->addFile('dir1/file1.txt'); $zip->addFile('dir1/file2.txt'); // 先添加空目录的父目录 $zip->addEmptyDir('dir2'); $zip->addEmptyDir('dir2/dir3'); $zip->addFile('dir2/dir3/file3.txt'); $zip->close(); }
以上がファイルの圧縮と解凍の方法、および PHP での一般的な問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。