提问人:sivakumar 提问时间:12/2/2022 最后编辑:O. Jonessivakumar 更新时间:12/9/2022 访问量:957
PHP 7.4 升级到 PHP 8.1 后 PHP 输出缓冲区不工作
php output buffer not working after php 7.4 to php 8.1 upgrade
问:
下面的代码没有在浏览器中打印任何内容。实际上,它应该显示标题菜单。 如果我删除 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 不工作
答:
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
评论