注意:ob_end_flush(): 发送 zlib 输出压缩缓冲区 (1) 失败
Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in
我在本地主机上没有任何问题。但是当我在服务器上测试我的代码时,在每一页的末尾我都会看到这条通知。
我的代码:
<?php
ob_start();
include 'view.php';
$data = ob_get_contents();
ob_end_clean();
include 'master.php';
ob_end_flush(); // Problem is this line
在php.ini
中关闭zlib.output_compression解决了
zlib.output_compression = Off
WordPress 尝试在关机时刷新输出缓冲区。它失败了,因为你已经调用了 ob_end_flush()
.
您应该能够继续压缩,并简单地取消冲洗操作:
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
您现在可以手动调用 ob_end_flush()
,并保持 zlib 压缩。
尝试禁用wordpress调试模式,问题已解决。
您可以在 /wp-config.php
中禁用 WP 调试模式:
define('WP_DEBUG', FALSE);
我发现一个特定的插件是我们客户的一个 WP 站点上的原因。
在这种情况下,它是由 "NextGEN Gallery" 插件引起的,但奇怪的是,简单地停用然后激活插件就解决了这个问题。
对于遇到此问题的任何其他人,值得寻找面向插件的可疑前端并尝试相同的方法。如果您发现问题在重新激活罪魁祸首插件时再次出现,您应该向插件作者提交问题。
出于安全原因,您应该始终禁用实时网站上的前置错误 - 无论如何。
如果您想在 Wordpress 中隐藏错误并获取错误日志以供审查,您可以在 wp-config.php 文件中执行类似以下操作:
// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );
// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );
// Disable display of errors and warnings
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
PS:如果您想使用上面 alexg 的 remove_action 代码,remove_action('shutdown', 'wp_ob_end_flush_all', 1);
您需要将它放在主题的 functions.php 文件中。
PPS:您可能还想尝试在您的 wp-config.php 文件中使用 define(‘WP_MEMORY_LIMIT’,’1024M’);
- 但是,请注意不要分配超过您需要的数量因为这会影响 Wordpress 的前端,如果同时点击的页面过多,您将 运行 面临 运行 内存不足的风险。
我不建议完全禁用 wp_ob_end_flush_all()
功能,我绝对不会在您的 php.ini
文件中关闭 zlib.output_compression
。这是一个更好的方法,可以替换导致问题的源代码,并保留基础功能:
/**
* Proper ob_end_flush() for all levels
*
* This replaces the WordPress `wp_ob_end_flush_all()` function
* with a replacement that doesn't cause PHP notices.
*/
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
add_action( 'shutdown', function() {
while ( @ob_end_flush() );
} );
有关原因的更多详细信息,以及为什么这可能是最好的方法,请参见此处:Quick Fix for WordPress ob_end_flush() Error
另一种情况:
我在我的实时站点上收到了此通知,但在本地主机和登台/演示站点上却没有,即使演示站点与实时站点位于同一台服务器上。
结果是 zlib 扩展没有在实时站点上激活,它引起了通知。一旦 zlib 扩展被激活,通知就停止了。 所以不需要代码修复。
只需将其添加到主题 functions.php 文件
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
别慌,就这么简单。只需打开函数 php 并找到此代码
**
* Flush all output buffers for PHP 5.2.
*
* Make sure all output buffers are flushed before our singletons are destroyed.
*
* @since 2.2.0
*/
function wp_ob_end_flush_all() {
$levels = ob_get_level();
for ( $i = 0; $i < $levels; $i++ ) {
ob_end_flush();
}
}
在你简单删除“ob_end_flush();”之后并替换此代码
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
100% 解决了。
只需在关闭挂钩上使用您的代码并使位置更早
默认的 ob_end_flush() 将识别您的输出并刷新它
add_action('shutdown', 'your_code', 0);
function your_code(){
/* Your Code Goes here */
}
将此 ob_end_flush()
替换为 remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 )
**
* Flush all output buffers for PHP 5.2.
*
* Make sure all output buffers are flushed before our singletons are destroyed.
*
* @since 2.2.0
*/
function wp_ob_end_flush_all() {
$levels = ob_get_level();
for ( $i = 0; $i < $levels; $i++ ) {
ob_end_flush();
}
}
更新后的代码应该如下所示
function wp_ob_end_flush_all() {
$levels = ob_get_level();
for ( $i = 0; $i < $levels; $i++ ) {
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
}
}
我尝试了一种有效的蛮力方法(我对此并不满意,但希望这可以帮助某人):
在/wp-content/themes//functions.php 的最后一行(显然在 php 闭包 '?>' 之前)添加以下行:
ob_get_clean();
这个错误可能是因为没有关闭?>
我是在收到“插件在激活期间生成了X个字符的意外输出”错误然后激活调试后来到这里的。我将 index.php 中的包含文件缩小为导致 with/without 错误的目标文件。然后我进入那个文件,并用 PHP 标签关闭文件,因为文件中有很多函数。之后工作。
我在本地主机上没有任何问题。但是当我在服务器上测试我的代码时,在每一页的末尾我都会看到这条通知。
我的代码:
<?php
ob_start();
include 'view.php';
$data = ob_get_contents();
ob_end_clean();
include 'master.php';
ob_end_flush(); // Problem is this line
在php.ini
zlib.output_compression = Off
WordPress 尝试在关机时刷新输出缓冲区。它失败了,因为你已经调用了 ob_end_flush()
.
您应该能够继续压缩,并简单地取消冲洗操作:
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
您现在可以手动调用 ob_end_flush()
,并保持 zlib 压缩。
尝试禁用wordpress调试模式,问题已解决。
您可以在 /wp-config.php
中禁用 WP 调试模式:
define('WP_DEBUG', FALSE);
我发现一个特定的插件是我们客户的一个 WP 站点上的原因。
在这种情况下,它是由 "NextGEN Gallery" 插件引起的,但奇怪的是,简单地停用然后激活插件就解决了这个问题。
对于遇到此问题的任何其他人,值得寻找面向插件的可疑前端并尝试相同的方法。如果您发现问题在重新激活罪魁祸首插件时再次出现,您应该向插件作者提交问题。
出于安全原因,您应该始终禁用实时网站上的前置错误 - 无论如何。
如果您想在 Wordpress 中隐藏错误并获取错误日志以供审查,您可以在 wp-config.php 文件中执行类似以下操作:
// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );
// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );
// Disable display of errors and warnings
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
PS:如果您想使用上面 alexg 的 remove_action 代码,remove_action('shutdown', 'wp_ob_end_flush_all', 1);
您需要将它放在主题的 functions.php 文件中。
PPS:您可能还想尝试在您的 wp-config.php 文件中使用 define(‘WP_MEMORY_LIMIT’,’1024M’);
- 但是,请注意不要分配超过您需要的数量因为这会影响 Wordpress 的前端,如果同时点击的页面过多,您将 运行 面临 运行 内存不足的风险。
我不建议完全禁用 wp_ob_end_flush_all()
功能,我绝对不会在您的 php.ini
文件中关闭 zlib.output_compression
。这是一个更好的方法,可以替换导致问题的源代码,并保留基础功能:
/**
* Proper ob_end_flush() for all levels
*
* This replaces the WordPress `wp_ob_end_flush_all()` function
* with a replacement that doesn't cause PHP notices.
*/
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
add_action( 'shutdown', function() {
while ( @ob_end_flush() );
} );
有关原因的更多详细信息,以及为什么这可能是最好的方法,请参见此处:Quick Fix for WordPress ob_end_flush() Error
另一种情况:
我在我的实时站点上收到了此通知,但在本地主机和登台/演示站点上却没有,即使演示站点与实时站点位于同一台服务器上。
结果是 zlib 扩展没有在实时站点上激活,它引起了通知。一旦 zlib 扩展被激活,通知就停止了。 所以不需要代码修复。
只需将其添加到主题 functions.php 文件
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
别慌,就这么简单。只需打开函数 php 并找到此代码
**
* Flush all output buffers for PHP 5.2.
*
* Make sure all output buffers are flushed before our singletons are destroyed.
*
* @since 2.2.0
*/
function wp_ob_end_flush_all() {
$levels = ob_get_level();
for ( $i = 0; $i < $levels; $i++ ) {
ob_end_flush();
}
}
在你简单删除“ob_end_flush();”之后并替换此代码
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
100% 解决了。
只需在关闭挂钩上使用您的代码并使位置更早 默认的 ob_end_flush() 将识别您的输出并刷新它
add_action('shutdown', 'your_code', 0);
function your_code(){
/* Your Code Goes here */
}
将此 ob_end_flush()
替换为 remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 )
**
* Flush all output buffers for PHP 5.2.
*
* Make sure all output buffers are flushed before our singletons are destroyed.
*
* @since 2.2.0
*/
function wp_ob_end_flush_all() {
$levels = ob_get_level();
for ( $i = 0; $i < $levels; $i++ ) {
ob_end_flush();
}
}
更新后的代码应该如下所示
function wp_ob_end_flush_all() {
$levels = ob_get_level();
for ( $i = 0; $i < $levels; $i++ ) {
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
}
}
我尝试了一种有效的蛮力方法(我对此并不满意,但希望这可以帮助某人):
在/wp-content/themes/
ob_get_clean();
这个错误可能是因为没有关闭?>
我是在收到“插件在激活期间生成了X个字符的意外输出”错误然后激活调试后来到这里的。我将 index.php 中的包含文件缩小为导致 with/without 错误的目标文件。然后我进入那个文件,并用 PHP 标签关闭文件,因为文件中有很多函数。之后工作。