clue / zlib-react
ReactPHP 的流式 zlib 压缩和解压缩器,支持 GZIP、ZLIB 和原始 DEFLATE 格式的压缩和解压缩。
Requires
- php: >=7.0
- ext-zlib: *
- react/stream: ^1.2
Requires (Dev)
- phpunit/phpunit: ^9.6 || ^6.5
- react/event-loop: ^1.2
This package is auto-updated.
Last update: 2024-09-04 17:12:20 UTC
README
ReactPHP 的流式 zlib 压缩和解压缩器,支持 GZIP、ZLIB 和原始 DEFLATE 格式的压缩和解压缩。
目录
支持我们
我们投入了大量时间来开发、维护和更新我们出色的开源项目。您可以通过在 GitHub 上成为赞助商来帮助我们维持这种高质量的工作。赞助商将获得许多回报,有关详情请参阅我们的赞助页面。
让我们共同努力将这些项目提升到新的高度!🚀
快速入门示例
安装后,您可以使用以下代码将可读的 gzip 文件流管道输入到解压缩器中,该解压缩器为每个单独的日志文件块发出解压缩数据事件
$stream = new React\Stream\ReadableResourceStream(fopen('access.log.gz', 'r')); $decompressor = new Clue\React\Zlib\Decompressor(ZLIB_ENCODING_GZIP); $stream->pipe($decompressor); $decompressor->on('data', function ($data) { echo $data; // chunk of decompressed log data });
请参阅示例。
格式
此库是围绕底层 zlib 库的轻量级包装器。zlib 库提供多种不同的格式(有时被称为 编码),如下所述。
GZIP 格式
此库支持在RFC 1952中定义的 GZIP 压缩格式。这是更常见的压缩格式之一,并被用于多个地方
- PHP:
ZLIB_ENCODING_GZIP
(仅 PHP 5.4+) - PHP:
gzdecode()
(仅 PHP 5.4+)和gzencode()
- 具有
.gz
文件扩展名的文件,例如.tar.gz
或.tgz
归档(也称为“tarball”) gzip
和gunzip
(及其家族)命令行工具- 带有
Content-Encoding: gzip
头的 HTTP 压缩 - Java:
GZIPOutputStream
技术上,此格式使用原始 DEFLATE 压缩,并包含在 GZIP 头和尾中
10 bytes header (+ optional headers) + raw DEFLATE body + 8 bytes footer
原始 DEFLATE 格式
此库支持在RFC 1951中定义的原始 DEFLATE 压缩格式。DEFLATE 压缩算法返回我们所说的“原始 DEFLATE 格式”。这种原始 DEFLATE 格式通常被包裹在容器格式中,而不是直接使用
注意:此格式与一些人所说的“deflate格式”或“deflate编码”不同。这些名称通常用于指代我们所说的ZLIB格式。
ZLIB 格式
此库支持RFC 1950中定义的ZLIB压缩格式。此格式在流式环境中常用。
- PHP:
ZLIB_ENCODING_DEFLATE
(仅限PHP 5.4+) - PHP:
gzcompress()
和gzuncompress()
- HTTP压缩,使用带有
Content-Encoding: deflate
头部的压缩 - Java:
DeflaterOutputStream
- Qt的
qCompress()
和qUncompress()
使用带有未压缩长度前缀的ZLIB格式(作为UINT32BE
)。
从技术上讲,此格式使用原始DEFLATE压缩,并包含ZLIB头部和尾部。
2 bytes header (+ optional headers) + raw DEFLATE body + 4 bytes footer
注意:此格式通常被称为“deflate格式”或“deflate编码”。本文档避免使用此名称,以避免与原始DEFLATE格式混淆。
使用方法
所有类都使用Clue\React\Zlib
命名空间。
压缩器
Compressor
类可以用来压缩数据流。
它实现了DuplexStreamInterface
,并在其可写端接受未压缩数据,在其可读端输出压缩数据。
$encoding = ZLIB_ENCODING_GZIP; // or ZLIB_ENCODING_RAW or ZLIB_ENCODING_DEFLATE $compressor = new Clue\React\Zlib\Compressor($encoding); $compressor->on('data', function ($data) { echo $data; // compressed binary data chunk }); $compressor->write($uncompressed); // write uncompressed data chunk
这在管道环境中尤其有用。
$input->pipe($filterBadWords)->pipe($compressor)->pipe($output);
有关详细信息,请参阅ReactPHP的DuplexStreamInterface
。
解压缩器
Decompressor
类可以用来解压缩数据流。
它实现了DuplexStreamInterface
,并在其可写端接受压缩数据,在其可读端输出解压缩数据。
$encoding = ZLIB_ENCODING_GZIP; // or ZLIB_ENCODING_RAW or ZLIB_ENCODING_DEFLATE $decompressor = new Clue\React\Zlib\Decompressor($encoding); $decompressor->on('data', function ($data) { echo $data; // decompressed data chunk }); $decompressor->write($compressed); // write compressed binary data chunk
这在管道环境中尤其有用。
$input->pipe($decompressor)->pipe($filterBadWords)->pipe($output);
有关详细信息,请参阅ReactPHP的DuplexStreamInterface
。
安装
安装此库的推荐方法是通过Composer。 你是Composer的新手吗?
本项目遵循SemVer。这将安装最新支持版本。
composer require clue/zlib-react:^1.2
有关版本升级的详细信息,请参阅变更日志。
本项目旨在在所有平台上运行,因此除了ext-zlib
之外,不要求安装任何PHP扩展。它支持在PHP 7至当前PHP 8+上运行。强烈建议使用此项目支持的最新PHP版本。
需要ext-zlib
扩展来处理底层的数据压缩和解压缩。此扩展作为许多PHP发行版的一部分默认安装,例如,它随Debian/Ubuntu基于PHP的安装和基于Windows的构建一起提供。如果您是从源代码构建PHP,您可能需要手动启用它。
我们致力于为旧配置提供平滑的升级路径。如果您需要支持旧版PHP版本和旧版HHVM,您可能需要查看旧的v0.2.x
发布分支。此旧版发布分支还提供了一个安装候选者,在安装过程中不需要ext-zlib
,而是使用运行时检查。在这种情况下,您可以像这样安装此项目
composer require "clue/zlib-react:^1.0||^0.2.2"
测试
要运行测试套件,您首先需要克隆此仓库,然后通过Composer安装所有依赖项
composer install
要运行测试套件,请前往项目根目录并执行
vendor/bin/phpunit
许可证
本项目采用宽松的MIT许可证发布。
你知道吗?我提供定制开发服务,并为发布和贡献发放发票。如需详细了解,请联系我(@clue)。
更多
-
如果您想了解更多关于处理数据流的信息,请参阅底层react/stream组件的文档。
-
如果您想处理压缩的tar包(
.tar.gz
和.tgz
文件扩展名),您可能需要在解压缩的流上使用clue/reactphp-tar。