esplora / decompresso
PHP库,轻松提取各种归档格式的文件内容。
0.0.2
2024-08-20 21:30 UTC
Requires
- symfony/mime: ^6.4|^7.1
- symfony/var-dumper: ^6.4|^7.1
Requires (Dev)
- ext-zlib: *
- laravel/pint: ^1.17
- phpunit/phpunit: ^10.5
- vimeo/psalm: ^5.0
Suggests
- ext-phar: Required for TAR archives support.
- ext-rar: Required for RAR archives support.
- ext-zlib: Required for GZIP archives support.
This package is auto-updated.
Last update: 2024-09-20 21:43:11 UTC
README
Decompresso是一个用于从各种归档格式中提取内容的库,提供灵活性和易用性,包括对密码保护的归档的支持。
特性
- 密码保护归档:使用各种方法处理加密归档的密码。
- 灵活的处理器系统:轻松添加和配置不同归档格式的处理器。
- 直观的界面:利用流畅的API方便配置和处理成功或失败的提取事件。
安装
使用Composer安装库
composer require esplora/decompresso
用法
要开始使用,创建一个Extractor
类的实例并添加归档格式的必要处理器。以下示例演示了使用ZipArchiveAdapter
处理ZIP文件,但您也可以添加自己的处理器或使用内置的处理器。
use Esplora\Decompresso\Extractor; use Esplora\Decompresso\Adapters\ZipArchiveAdapter; use Esplora\Decompresso\Adapters\GzipArchiveAdapter; // Create a new Extractor instance to manage the extraction process $extractor = new Extractor(); // Specify which archive handlers will be used $extractor->withAdapters([ new ZipArchiveAdapter(), new GzipArchiveAdapter(), ]); // Returns a boolean depending on the outcome of the extraction process $extractor->extract('/path/to/your/archive.zip', '/path/to/extract/to');
处理密码保护归档
要处理密码保护的归档,请添加一个密码提供者。以下示例使用ArrayPasswordProvider
,它接受密码数组。
use Esplora\Decompresso\Extractor; use Esplora\Decompresso\Adapters\ZipArchiveAdapter; use Esplora\Decompresso\Adapters\GzipArchiveAdapter; use Esplora\Decompresso\Providers\ArrayPasswordProvider; $extractor = new Extractor(); $extractor ->withPasswords(new ArrayPasswordProvider([ 'qwerty', 'xxx123', ])) ->withAdapters([ new ZipArchiveAdapter(), new GzipArchiveAdapter(), ]); // Returns a boolean depending on the outcome of the extraction process $extractor->extract('/path/to/your/archive.zip', '/path/to/extract/to');
如果需要,您可以通过实现PasswordProviderInterface
来创建自己的密码提供者。例如,可以创建一个DataBasePasswordProvider
,用于从数据库中获取密码并缓存。
如果您没有密码数据库但想尝试所有可能的组合,您可以使用SecLists作为暴力破解流行密码的来源。
事件处理
为了更好地控制提取过程,您可以添加事件处理器。这允许您接收有关提取失败原因的信息或响应成功完成。
use Esplora\Decompresso\Extractor; use Esplora\Decompresso\Handlers\ZipArchiveHandler; use Esplora\Decompresso\Handlers\GzipArchiveHandler; use Esplora\Decompresso\Providers\ArrayPasswordProvider; $extractor = new Extractor(); $extractor ->withPasswords(new ArrayPasswordProvider([ 'qwerty', 'xxx123', ])) ->withAdapters([ new ZipArchiveAdapter(), new GzipArchiveAdapter(), ]) // Define logic to execute on successful extraction ->onSuccess(fn() => true) // Handle cases where extraction fails due to an incorrect password ->onPasswordFailure(fn() => false) // Handle any other errors encountered during extraction ->onFailure(fn() => false) // Extracts the archive and returns the result of the closure $extractor->extract('/path/to/your/archive.zip', '/path/to/extract/to');
待办事项
- 添加一个响应文件,将“因错误无法解包”与“因密码不匹配无法解包”区分开来
- 添加RAR归档的处理程序
- 添加7z归档的处理程序
- 在测试中添加完整性检查
- 对处理程序进行文件扩展名检查,以便它跳过不支持格式的文件
- 考虑直接向处理程序传递MIME-type,而不是每次都创建它。 - 否。这将违反责任。
- 如果不需要,不要调用密码提供者。
- 需要更新注释!密码注释也要更新!
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。