WordPress程序中的几种文件打包压缩方法

how to compress file in wordpress

在 WordPress 编程中经常会遇到打包压缩的需求,比如前端编辑好的内容进行后端压缩存储,数据库备份转储的文件做打包压缩,文件备份等场景。这些需求有三种方式来实现,包括 WordPress 自己的类库,PHP 的类库和第三方的类库,本篇文章逐一介绍。

一、WordPress 类库

WordPress 自带的压缩和解压缩类库叫做 “pclzip”,这个类库程序代码的存放位置在wp-admin/includes/class-pclzip.php文件里面,可以用来处理 zip 格式的文件。具体的使用方法如下:

...
if (is_readable(ABSPATH . 'wp-admin/includes/class-pclzip.php')) {
	require_once(ABSPATH . 'wp-admin/includes/class-pclzip.php');
        //压缩后的文件名存放在变量 $zip_file 中
	$pz = new PclZip($zip_file);
	//待压缩的文件名存放在变量 $rawfile 中
        $created = $pz->create($rawfile, PCLZIP_OPT_REMOVE_PATH, dirname($rawfile));
        //创建成功,删除原文件
        if ($created) {
            unlink( $rawfile );
        }
}
...

解压缩工具用的是函数 unzip_file,该函数使用 ZipArchive 和 pclzip 两种方式之一来处理解压缩操作,先判断是否能用 ZipArchive,如不能再用 pclzip。

二、PHP 类库

PHP 压缩、解压缩的类库有很多种,都是通过扩展模块(extension)来实现的,详细的内容可以参考官网的说明,这里主要介绍两种,ZipArchivePharData

1、ZipArchive

使用该类库需要在编译 PHP 的时候加上 –with-zip (php 7.4)或者 –enable-zip(php 7.3)选项,可以参考这篇文章。压缩、解压缩 zip 的方法如下:

...
if (class_exists('ZipArchive') && apply_filters('unzip_file_use_ziparchive', true)) {
        //设置内存需求
        @ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT));
        //压缩
        $z = new ZipArchive;
        $opened = $z->open($zip_diskfile, ZipArchive::CREATE);
        if ($opened === TRUE) {
            $z->addFile($rawfile, basename($rawfile));
            $z->close();
            unlink( $rawfile );
        }
        //解压缩
        $z = new ZipArchive;
        if ($z->open($zip_diskfile) === TRUE) {
            $z->extractTo($rawfile);
            $z->close();
        }
}
...
2、PharData

Phar 扩展模块在编译 PHP 的时候是自动捆绑的,所以编译好后可以直接使用(支持zip 和 tar)。操作系统库需要安装 zlib 和 bzip2。压缩、解压缩 zip 的方法如下:

...
//压缩
$p = new PharData($zip_diskfile);
if (is_dir($rawfile)) {
      $p->buildFromDirectory($rawfile);
} else {
      $p->addFile($rawfile, basename($rawfile));
}
//解压缩
try {
    $p = new PharData($zip_diskfile);
    $p->extractTo(dirname($zip_diskfile));
} catch (Exception $e) {
    // 错误处理
}
...

三、第三方类库

有两个第三方库可以看看,ZippyPHPArchive。Zippy 使用 了PHP 扩展,支持命令行,格式也更多一些。PHPArchive 是完全用 PHP 写的,支持 zip 和 tar。

发表评论

邮箱地址不会被公开。 必填项已用*标注