我在localhost上没有任何问题。但是当我在服务器上测试我的代码时,每个页面的末尾都会看到这个通知。
我的代码:
<?php
ob_start();
include 'view.php';
$data = ob_get_contents();
ob_end_clean();
include 'master.php';
ob_end_flush(); // Problem is this line
答案 0 :(得分:19)
WordPress尝试在关闭时刷新输出缓冲区。之所以失败,是因为您已经呼叫了ob_end_flush()
。
您应该能够保持压缩状态,并简单地取消刷新动作:
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
您现在可以手动调用ob_end_flush()
,并保持zlib压缩打开。
答案 1 :(得分:6)
在php.ini
zlib.output_compression = Off
答案 2 :(得分:2)
我发现某个特定的插件是我们客户的WP网站之一的原因。
在这种情况下,它是由“ NextGEN Gallery”插件引起的,但是奇怪的是先停用然后激活该插件即可解决此问题。
对于其他任何有此问题的人,值得寻找可疑的前端插件并尝试使用。如果您发现再次启动罪魁祸首插件时问题再次出现,则应向插件作者提出问题。
答案 3 :(得分:2)
别着急,这很简单。只需打开函数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%。
答案 4 :(得分:1)
出于安全原因,您应该始终禁用实时网站上的前端错误-不管。
如果您想在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的前端和如果页面上同时点击的次数过多,则会冒用完RAM的风险。
答案 5 :(得分:0)
我不建议您完全禁用wp_ob_end_flush_all()
功能,并且绝对不会在您的zlib.output_compression
文件中关闭php.ini
。这是一种更好的方法,它可以代替引起问题的源代码并保留基本功能:
/**
* 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
答案 6 :(得分:0)
另一种情况:
即使演示站点与实时站点位于同一服务器上,我仍在实时站点上收到此通知,但在本地主机和暂存/演示站点上却未收到此通知。
原来,zlib扩展未在实时站点上激活,并且正在引起通知。一旦激活zlib扩展,通知便停止了。 因此不需要代码修复。
答案 7 :(得分:0)
只需将其添加到主题functions.php文件中
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
答案 8 :(得分:0)
只需在关闭挂钩上使用您的代码并提前定位 并且默认的 ob_end_flush() 将识别您的输出并将其刷新
add_action('shutdown', 'your_code', 0);
function your_code(){
/* Your Code Goes here */
}
答案 9 :(得分:0)
将此 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 );
}
}
答案 10 :(得分:0)
我尝试了一种有效的蛮力方法(我对此并不满意,但希望这可以帮助某人):
在 /wp-content/themes/
ob_get_clean();
答案 11 :(得分:-6)
尝试禁用wordpress调试模式,此问题已解决。
您可以在/wp-config.php
中禁用WP调试模式:
define('WP_DEBUG', FALSE);