wapmorgan/unified-archive

UnifiedArchive - 一个具有统一界面的存档管理器,可以处理所有流行的存档格式(zip/7z/rar/gz/bz2/xz/cab/tar/tar.gz/tar.bz2/tar.x/tar.Z/...),适用于PHP,具有列出、读取、提取和创建功能,以及内置的命令行存档管理器。

1.2.0 2023-06-30 15:52 UTC

README

UnifiedArchive - 一个具有统一格式的存档管理器,能够在各种系统配置下工作。它支持所有广泛格式的基本操作,以及一些针对最流行格式的特定功能(zip、rar、7z、tar)。

该库的主要目的是为流行的存档格式创建统一的界面,通过不同的驱动程序在各种系统配置下工作,在没有能力更新系统配置、将代码传递到另一个系统配置或只需安装库和工作时非常有用。当需要支持不同系统配置的存档类型时,它特别有用。

Latest Stable Version Total Downloads Daily Downloads License Latest Unstable Version

测试与质量: Scrutinizer Code Quality Code Coverage

  1. 功能与特性
  2. 工作原理
  3. 快速开始
  4. 内置命令行存档管理器
  5. 使用方法
  6. 驱动程序与格式
  7. 完整的API描述
  8. 变更日志

功能与特性

UnifiedArchive旨在以所有方式提供对流行存档格式(zip、tar、rar、7z)的操作,并具有更好的性能(取决于您的操作系统/PHP配置)。它还允许处理不太流行的存档类型(功能有限)。

主要功能

  • 使用自动格式检测打开存档(超过20种格式)。
  • 列出存档内容,计算存档原始大小
  • 获取每个存档文件的详细信息(原始大小、修改日期)。提取或流存档文件内容
  • 提取所有存档内容。向存档中添加新文件或目录。从存档中删除文件
  • 使用磁盘上的文件/目录创建新的存档并从内存中流式传输
  • 为所有格式完全实现了类似于PclZip的存档界面,易于从旧PclZip迁移。
  • 附带命令行实用程序

特定功能

工作原理

UnifiedArchive使用“驱动程序”,可以是以下类型之一

  1. PHP扩展
  2. 实用程序+桥接
  3. 纯PHP

默认情况下,UA从上到下选择通过存档传递的第一个可用驱动程序。因此,如果可用,则将使用PHP扩展驱动程序,然后是实用程序+桥接驱动程序(如果可用),最后是纯PHP驱动程序。

在所有三种类型中至少有一个驱动程序可以处理zip格式,因此该格式可以在任何操作系统/PHP配置中得到完全支持。

  1. PHP扩展:zip / phar
  2. 工具+桥梁:SevenZip / AlchemyZippy
  3. 纯:NelexaZip / SplitbrainPhpArchive

tar格式(包含压缩变体)由以下PHP扩展支持

  1. PHP扩展:phar
  2. 工具+桥梁:SevenZip / AlchemyZippy
  3. 纯:TarByPear / SplitbrainPhpArchive

因此,总有一个支持流行格式的驱动程序,你不需要记住如何使用这个具体的驱动程序(zip/phar/SevenZip/AlchemyZippy/NelexaZip/SplitbrainPhpArchive),它们的接口是统一的。

快速开始

安装和配置

安装库

composer require wapmorgan/unified-archive
#Check supported formats with installed drivers
./vendor/bin/cam system:formats
#Check supported functions for zip format
./vendor/bin/cam system:format zip

安装新驱动程序

#Read installation instructions from
./vendor/bin/cam system:drivers
#install missing drivers, for example pear/archive_tar
composer require pear/archive_tar
#check out driver functions
./vendor/bin/cam system:formats TarByPear

#if needed, install extensions, cli tools and php libraries
#to enable support of other formats

使用方法

use \wapmorgan\UnifiedArchive\UnifiedArchive;
$output_dir = '/var/www/extracted';
# Extraction
$archive = UnifiedArchive::open('archive.zip'); // archive.rar, archive.tar.bz2
if (disk_free_space($output_dir) < $archive->getOriginalSize()) {
    throw new \RuntimeException('No needed space available. Need ' . ($archive->getOriginalSize() - disk_free_space($output_dir)) . ' byte(s) more');
}
$extracted = $archive->extract($output_dir);
echo 'Number of extracted files' . $extracted.PHP_EOL;

# Archiving
UnifiedArchive::create([
    'README.md' => '/default/path/to/README.md',
    '' => '/folder/with/content/',
], 'archive.zip');

内置命令行存档管理器

UnifiedArchive附带一个统一的控制台程序来操作归档。它支持UnifiedArchive支持的 所有格式和操作,因此可以用来操作归档而无需其他系统软件。要显示帮助,请启动它

./vendor/bin/cam list # help
./vendor/bin/cam archive:info archive.tar.gz # archive information
./vendor/bin/cam files:list -l archive.tar.gz # files list (or files:table for table)
./vendor/bin/cam archive:extract archive.tar.gz ./OUTPUT/ # extraction all archive
./vendor/bin/cam archive:create --compression=maximum archive2.tar.gz ./OUTPUT/partners # archive creation from files