PHP 7.4 升级到 PHP 8.1 后 PHP 输出缓冲区不工作

php output buffer not working after php 7.4 to php 8.1 upgrade

提问人:sivakumar 提问时间:12/2/2022 最后编辑:O. Jonessivakumar 更新时间:12/9/2022 访问量:957

问:

下面的代码没有在浏览器中打印任何内容。实际上,它应该显示标题菜单。 如果我删除 ob_start();和 ob_end_clean() 至少它的打印菜单没有 CSS。

// Turn on output buffering HTML

ob_start();

echo preg_replace( '/\n|\t/i', '', implode( '' , $wr_nitro_header_html ) );

WR_Nitro_Header_Builder::prop( 'html', ob_get_contents() );

ob_end_clean()

更新:相同的代码适用于 php7.4 但是 php8.1 不工作

wordpress 输出缓冲 php-8.1

评论

0赞 O. Jones 12/4/2022
WR Nitro 是一个专有主题。您也许可以从他们的支持人员那里获得一些帮助。
0赞 CK MacLeod 12/6/2022
如何在 7.4 和 8.1 之间切换?

答:

0赞 Marsellus 12/7/2022 #1

您的主题可能与 8.1 不兼容,因为从 7.4 迁移到 8.1 时引入了几项重大更改。尝试添加:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);

添加到您的 wp-config.php 文件,查看错误是否打印到 DOM,或者显示为 false 并检查 debug.log 如果您担心打印错误。

然后,直接联系主题公司,询问他们是否与 PHP 8.1 兼容。

-1赞 Dev Błack 12/9/2022 #2

存在兼容性问题,因为在 PHP 8.1 中更改了输出缓冲

在 PHP 8.1 中。您必须使用新的别名,而不是使用 PHP 7.4 函数。ob_*

例如:

use function OutputControl\ob_start;
use function OutputControl\ob_end_flush;
use function OutputControl\ob_get_clean;

ob_start();

echo "Hello, world!";

ob_end_flush();

$output = ob_get_clean();

或者,您可以像这样使用命名空间:OutputControl

use OutputControl;

// Enable output buffering
ob_start();

echo "Hello, world!";

ob_end_flush();

$output = ob_get_clean();

评论

0赞 eCronik 12/22/2022
嗨,我从一段时间开始使用这段代码链接,但我无法解决 Twitter/Reddit 嵌入字符串或他们正在创建的 iFrame 代码(GTag 有效)。此外,我还收到此错误:(使用 WP 6.0.3、PHP 8.1.13)我也收到 PHP 弃用错误,但只要一切正常,它就不会太糟糕,对吧?您能否帮助我根据我的用例调整您的示例代码?PHP Notice: ob_end_flush(): Failed to delete and flush buffer. No buffer to delete or flush in [...]child/functions.php