wapmorgan / unified-archive
UnifiedArchive - 一个具有统一界面的存档管理器,可以处理所有流行的存档格式(zip/7z/rar/gz/bz2/xz/cab/tar/tar.gz/tar.bz2/tar.x/tar.Z/...),适用于PHP,具有列出、读取、提取和创建功能,以及内置的命令行存档管理器。
Requires
- php: >=5.5.0
- ext-fileinfo: *
Requires (Dev)
- phpunit/phpunit: ~4.8|9.5.16
- symfony/console: ~v3.4.47|~v4.4.42|~5.4|~6.1
Suggests
- ext-bz2: [extension] BZ2 (BZIP2) support
- ext-phar: [extension] TAR/ZIP support
- ext-rar: [extension] RAR support
- ext-xz: [extension] XZ (LZMA) support
- ext-zip: [extension] ZIP support
- ext-zlib: [extension] GZ (GZIP) support
- alchemy/zippy: [utility + bridge] ZIP, TAR, GZIP, BZIP2 support (with combinations) via console programs
- bin-ncompress: [utility] TAR.Z support via console program
- gemorroj/archive7z: [utility + bridge] 7ZIP (and a lot of other formats) support via console program
- nelexa/zip: [pure] ZIP native support
- pear/archive_tar: [pure] another native TAR support
- phpclasses/php-iso-file: [pure] native ISO support
- splitbrain/php-archive: [pure] ZIP/TAR (tgz/tbz2) native support
- symfony/console: Requirement for cam (Console Archive Manager)
- wapmorgan/cab-archive: [pure] native CAB support
Replaces
- pclzip/pclzip: 2.8.2
- wapmorgan/cam: 1.0.2
README
UnifiedArchive - 一个具有统一格式的存档管理器,能够在各种系统配置下工作。它支持所有广泛格式的基本操作,以及一些针对最流行格式的特定功能(zip、rar、7z、tar)。
该库的主要目的是为流行的存档格式创建统一的界面,通过不同的驱动程序在各种系统配置下工作,在没有能力更新系统配置、将代码传递到另一个系统配置或只需安装库和工作时非常有用。当需要支持不同系统配置的存档类型时,它特别有用。
功能与特性
UnifiedArchive旨在以所有方式提供对流行存档格式(zip、tar、rar、7z)的操作,并具有更好的性能(取决于您的操作系统/PHP配置)。它还允许处理不太流行的存档类型(功能有限)。
主要功能
- 使用自动格式检测打开存档(超过20种格式)。
- 列出存档内容,计算存档原始大小
- 获取每个存档文件的详细信息(原始大小、修改日期)。提取或流存档文件内容
- 提取所有存档内容。向存档中添加新文件或目录。从存档中删除文件
- 使用磁盘上的文件/目录创建新的存档并从内存中流式传输
- 为所有格式完全实现了类似于PclZip的存档界面,易于从旧PclZip迁移。
- 附带命令行实用程序
特定功能
- 读取(zip、rar)和设置(zip)存档注释
- 打开带有密码加密的存档(zip、rar、7z)
- 为新的存档设置密码(7z、zip)
- 调整新存档的压缩级别(zip、gzip、7zip)
工作原理
UnifiedArchive使用“驱动程序”,可以是以下类型之一
- PHP扩展
- 实用程序+桥接
- 纯PHP
默认情况下,UA从上到下选择通过存档传递的第一个可用驱动程序。因此,如果可用,则将使用PHP扩展驱动程序,然后是实用程序+桥接驱动程序(如果可用),最后是纯PHP驱动程序。
在所有三种类型中至少有一个驱动程序可以处理zip格式,因此该格式可以在任何操作系统/PHP配置中得到完全支持。
- PHP扩展:zip / phar
- 工具+桥梁:SevenZip / AlchemyZippy
- 纯:NelexaZip / SplitbrainPhpArchive
tar格式(包含压缩变体)由以下PHP扩展支持
- PHP扩展:phar
- 工具+桥梁:SevenZip / AlchemyZippy
- 纯: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