esplora / decompresso

PHP库,轻松提取各种归档格式的文件内容。

0.0.2 2024-08-20 21:30 UTC

This package is auto-updated.

Last update: 2024-09-20 21:43:11 UTC


README

Tests Psalm

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)。请参阅许可文件以获取更多信息。