ホームページ  >  記事  >  バックエンド開発  >  PHP は ZipArchive クラスを使用してファイルの圧縮と解凍を実装します

PHP は ZipArchive クラスを使用してファイルの圧縮と解凍を実装します

王林
王林転載
2020-01-20 15:57:033308ブラウズ

PHP は ZipArchive クラスを使用してファイルの圧縮と解凍を実装します

ZipArchive クラスは、ファイルの圧縮と解凍操作に特化したクラスで、ファイルを圧縮することでディスク容量を節約し、圧縮ファイルのサイズを小さくしてネットワーク送信を容易にします。

ZipArchive クラスでは、主に次のメソッドを使用します。

1: open (圧縮パッケージ ファイルを開く)

$zip = new \ZipArchive;
$zip->open('test_new.zip', \ZipArchive::CREATE)

Parameter description :

最初のパラメータ: 開く圧縮パッケージ ファイル

2 番目のパラメータ:

ZIPARCHIVE::OVERWRITEAlways Create新しいファイル。指定した zip ファイルが存在する場合は上書きされます。

ZIPARCHIVE::CREATE指定した zip ファイルが存在しない場合は、新しい zip ファイルを作成します。

ZIPARCHIVE::EXCL指定された zip ファイルが存在する場合、エラーが報告されます。

ZIPARCHIVE::CHECKCONS指定された zip に対して追加の整合性テストを実行します。

(無料の学習ビデオ チュートリアルの共有: php ビデオ チュートリアル)

2: addFile (指定されたファイルを圧縮パッケージに追加します)

//将test.txt文件添加到压缩包中
$zip->addFile('test.txt'); //第二个参数可对文件进行重命名

3: addEmptyDir (指定された空のディレクトリを圧縮パッケージに追加します)

//将一个空的目录添加到zip中
 $zip->addEmptyDir ('newdir');

4: addFromString (指定された内容を含むファイルを圧縮パッケージに追加します) )

// 将有指定内容的new.txt文件添加到zip文件中
$zip->addFromString('new.txt', '要添加到new.txt文件中的文本');

5: extractTO (圧縮パッケージを指定されたディレクトリに解凍します)

$zip->extractTo('test');

6: getNameIndex (次に従ってファイル名を返します)インデックス)

$zip->getNameIndex(0);//返回压缩包中索引为0的文件名称

7: getStream (圧縮ファイル内のファイル名に従って、ファイルのテキスト ストリームを取得します)

$zip->getStream('hello.txt');

8: renameIndex (圧縮ファイル内のファイル名に従って) インデックス (0から開始) 圧縮ファイル内のファイル名を変更します)

/把压缩文件内第一个文件修改成newname.txt
$zip->renameIndex(0,'newname.txt');

9: renameName (ファイルを変更します)

//把压缩文件内的word.txt修改成newword.txt
$zip->renameName('word.txt','newword.txt');

10: deleteIndex (圧縮ファイル内のファイル名を元に圧縮ファイル内のファイルを削除)

//把压缩文件内第一个文件删除
$zip->deleteIndex (0);

11: deleteName (インデックスに基づいて圧縮ファイル内のファイルを削除します。名前でファイルを削除します)

//把压缩文件内的word.txt删除
$zip->deleteName('word.txt');

上記は、ZipArchive の一般的なメソッドの一部です。簡単な例をいくつか示します:

1: 圧縮パッケージを作成します

$zip = new \ZipArchive;
if ($zip->open('test_new.zip', \ZipArchive::CREATE) === true)
{
  // 将指定文件添加到zip中
  $zip->addFile('test.txt');
   
  // test.txt文件添加到zip并将其重命名为newfile.txt
  $zip->addFile('test.txt', 'newfile.txt');
   
  // 将test.txt文件添加到zip文件中的test文件夹内
  $zip->addFile('test.txt', 'test/newfile.txt');
   
  //将一个空的目录添加到zip中
  $zip->addEmptyDir ('test');
   
  // 将有指定内容的new.txt文件添加到zip文件中
  $zip->addFromString('new.txt', '要添加到new.txt文件中的文本');
   
  // 将有指定内容的new.txt添加到zip文件中的test文件夹
  $zip->addFromString('test/new.txt', '要添加到new.txt文件中的文本');
   
  //将images目录下所有文件添加到zip中
   if ($handle = opendir('images')){
     // 添加目录中的所有文件
     while (false !== ($entry = readdir($handle))){
        if ($entry != "." && $entry != ".." && !is_dir('images/' . $entry)){
            $zip->addFile('images/' . $entry);
        }
     }
     closedir($handle);
   }
   
  // 关闭zip文件
  $zip->close();
}

2: 圧縮パッケージのファイル情報を取得し、指定されたファイルを解凍します圧縮パッケージ

$zip = new \ZipArchive;
if ($zip->open('test_new.zip') === true) {
  //获取索引为0的文件名称
  var_dump($zip->getNameIndex(0));
   
  //将压缩包文件解压到test目录下
  $zip->extractTo('test');
   
  //获取压缩包指定文件的文本流
  $stream = $zip->getStream('test.txt');
   
  // 关闭zip文件
  $zip->close();
  $str = stream_get_contents($stream); //这里注意获取到的文本编码
  var_dump($str);
}

3: 圧縮パッケージ内の指定ファイルのファイル名を変更し、圧縮パッケージから削除する ファイル指定

$zip = new \ZipArchive;
if ($zip->open('test_new.zip') === true) {
  //把压缩文件内索引为0的文件修改成newname.txt
  $zip->renameIndex(0,'newname.txt');
  //把压缩文件内的new.txt修改成newword.txt
  $zip->renameName('new.txt','newword.txt');
  //删除压缩文件内索引为0的文件
  $zip->deleteIndex(0);
  //删除压缩文件的test.png
  $zip->deleteName('test.png');
  // 关闭zip文件
  $zip->close();
}

おすすめ関連記事とチュートリアル:php チュートリアル

以上がPHP は ZipArchive クラスを使用してファイルの圧縮と解凍を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。