PHP 8.5:弃用从自定义输出缓冲区处理程序发布输出
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 及更高版本中,这可能会引发致命错误。