编程

PHP 8.5:弃用从自定义输出缓冲区处理程序发布输出

11 2025-08-12 05:30:00

PHP 函数 ob_start 提供了一种方法来启动用户提供的输出缓冲区处理函数,并返回该函数处理过的缓冲区的内容。缓冲区处理函数不应自行发出任何输出,也不允许从处理函数中启动缓冲区。

如果用户提供的输出缓冲区处理程序发布自己的输出,则在 PHP 8.5 之前的 PHP 版本中,该输出将被静默忽略。自 PHP 8.5 开始,用户提供的输出缓冲区处理程序如果自行发布输出(例如,调用 print),PHP 会发出弃用警告;其输出继续被隐藏。

ob_start(
    static function(string $buffer, int $phase): string {
      echo "test"; // Emits output, deprecated, output still hidden
        return (str_replace("hunter2", "****", $buffer));
    }
);

echo "hunter2 test";

ob_end_flush();
Deprecated: ob_end_flush(): Producing output from user output handler ... is deprecated in ... on line ...

建议替代

输出缓冲区处理程序不应发出自己的输出。相反,他们可以修改传入的缓冲区内容,以包含他们可能想要包含的任何其他信息。

相关变更

  • PHP 8.5: 弃用从用户输出处理程序(handler)返回非字符串值

向后兼容性影响

从自定义输出缓冲区处理程序中发出输出现在会发出 PHP 弃用通知。输出继续隐藏,这在所有 PHP 版本中都是相同的行为。

在 PHP 9.0 及更高版本中,这可能会引发致命错误。

 

下一篇