代码 PHP 8.6 Stream 错误处理:error_mode 三种模式、filter chain 上限与 TLS 会话复用

2026-09-27 21:02:49

PHP 8.6 Stream 错误处理:error_mode 三种模式、filter chain 上限与 TLS 会话复用

PHP 8.6 对 Stream API 做了一轮错误处理改动(RFC: Stream Error Handling Improvements,已在 8.6 接受),目标是给此前比较松散的 stream 错误一个统一模型。

参考:

统一错误模型

  • stream context 的 error_mode 选项提供三种模式:warnings、exceptions、silence。这是 opt-in 的,默认保持旧行为。
  • stream_last_errors() 返回结构化的 StreamError 对象,不再只有一句字符串。
  • StreamException 暴露收集到的错误,错误码来自 StreamErrorCode 枚举,包含 50+ 个语义码。
  • 示例场景:以 StreamErrorMode::Exception 打开 /nonexistent/file.txt。

同版本其它 Stream 相关改动

TLS session resumption

过去即使复用同一条连接,Streams API 也要对每个请求重新做 TLS 握手;新改动允许复用该握手,属于性能改进。

限制 filter chain 数量上限

给 stream filter 链设了数量上限,防止通过构造大量 filter 链触发错误或绕过校验(一类 CE bug)。上限可配置。

Time\Duration

Time\Duration 是 8.6 新增的纳秒精度时长类,可作为内核函数与新轮询 API 的统一时长类型。

升级注意

以上这些在 8.6 里多为 opt-in,库会逐步采用。升级后先确认是否打开了 error_mode。

复制全文 生成海报 PHP 8.6 Stream 错误处理 TLS

推荐文章

程序员茄子在线接单