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。