zbateson/stream-decorators

PHP psr7 流装饰器,用于 MIME 消息部分流

资助包维护!
zbateson

安装: 29,197,610

依赖项: 3

建议者: 0

安全: 0

星标: 46

关注者: 3

分支: 7

开放问题: 0

2.1.1 2024-04-29 21:42 UTC

This package is auto-updated.

Last update: 2024-08-29 22:29:09 UTC


README

字符集转换和常见邮件格式内容编码的 psr7 流装饰器。

Tests Code Coverage Scrutinizer Code Quality Total Downloads Latest Stable Version

本项目的目标是

  • 编写得很好
  • 符合标准但宽容
  • 尽可能进行测试

要将其包含在您的项目中,请通过 composer 安装

composer require zbateson/stream-decorators

PHP 7 支持 已弃用

从 stream-decorators 2.0 开始,已弃用对 PHP 7 的支持。

需求

stream-decorators 需要 PHP 8.0 或更高版本。已在 8.0、8.1、8.2 和 8.3 上进行测试。

2.0 和 2.1 中的新功能

已弃用对 guzzlehttp/psr7 1.9 的支持,最低支持版本为 2.0。

zbateson/mb-wrapper 已更新到 2.0,它会在从/to 不支持的字符集转换时抛出 UnsupportedCharsetException,这改变了 CharsetStream 的行为。

2.1 中引入了两个新类,DecoratedCachingStream 和 TellZeroStream。

用法

$stream = GuzzleHttp\Psr7\Utils::streamFor($handle);
$b64Stream = new ZBateson\StreamDecorators\Base64Stream($stream);
$charsetStream = new ZBateson\StreamDecorators\CharsetStream($b64Stream, 'UTF-32', 'UTF-8');

while (($line = GuzzleHttp\Psr7\Utils::readLine()) !== false) {
    echo $line, "\r\n";
}

注意,CharsetStream 根据 目标编码,在读取单个 'char' 时可能会返回多个字节。如果使用 php 的 'fread',这将导致警告

'读取比请求的多 x 字节数据(xxxx 已读取,xxxx 最大) - 过多的数据将丢失'

这是因为 'fread' 的参数是字节,因此当 CharsetStream 返回时,例如,表示单个 UTF-32 字符的 4 个字节,fread 会截断到请求 '1' 个字节时的第一个字节。因此,当使用 CharsetStream 时,建议 不要 转换为流句柄(使用 StreamWrapper)。

该库由以下 Psr\Http\Message\StreamInterface 实现

  • ZBateson\StreamDecorators\Base64Stream - 读取时解码,写入时编码为 base64。
  • ZBateson\StreamDecorators\CharsetStream - 读取时从 $streamCharset 编码到 $stringCharset,写入时反之。
  • ZBateson\StreamDecorators\ChunkSplitStream - 将写入的字符分割成 $lineLength 长的行(php 的 chunk_split 的流实现)。
  • ZBateson\StreamDecorators\DecoratedCachingStream - 一个写入到装饰流的缓存流,并从缓存的未装饰流中读取,因此,例如,可以将流传递,并用 Base64Stream 装饰它,当读取时,返回的字节将进行 base64 编码。
  • ZBateson\StreamDecorators\NonClosingStream - 覆盖 close() 和 detach(),简单地取消设置附加的流而不关闭它。
  • ZBateson\StreamDecorators\PregReplaceFilterStream - 在每次 read() 调用中使用传递的参数调用 preg_replace。
  • ZBateson\StreamDecorators\QuotedPrintableStream - 读取时解码,写入时编码为 quoted-printable。
  • ZBateson\StreamDecorators\SeekingLimitStream - 与 GuzzleHttp 的 LimitStream 类似,但保持内部当前读取位置,在 read() 调用中定位到它,并在读取后回到包装流的当前位置。
  • ZBateson\StreamDecorators\TellZeroStream - tell() 总是返回 '0' -- 用于 DecoratedCachingStream 将 BufferStream 包装在 CachingStream 中。CachingStream 在其包装流上调用 tell(),而 BufferStream 抛出异常,因此使用 TellZeroStream 包装内部 BufferStream 来减轻这种情况。
  • ZBateson\StreamDecorators\UUStream - 读取时解码,写入时编码为 uu-encoded。

QuotedPrintableStream、Base64Stream 和 UUStream 的构造函数接受一个 StreamInterface 类型的单个参数。CharsetStreams 的构造函数还分别接受 $streamCharset 和 $stringCharset 作为参数,ChunkSplitStream 可选地接受一个 $lineLength 参数(默认为 76)和一个 $lineEnding 参数(默认为 CRLF)。PregReplaceFilterStream 接受一个 $pattern 参数和一个 $replacement 参数。SeekingLimitStream 可选地接受 $limit 和 $offset 参数,类似于 GuzzleHttp 的 LimitStream。

许可协议

BSD 许可协议 - 请参阅 许可协议