注意:ob_end_flush(): 未能在 中发送 zlib 输出压缩 (1) 的缓冲区

2022-08-30 15:32:15

我在本地主机上没有任何问题。但是当我在服务器上测试我的代码时,每个页面的末尾我都会看到这个通知。

我的代码:

<?php
ob_start();
include 'view.php';

$data = ob_get_contents();
ob_end_clean();
include 'master.php';
ob_end_flush();  // Problem is this line

答案 1

WordPress尝试在关机时刷新输出缓冲区。它失败,因为您已经调用了 。ob_end_flush()

您应该能够保持压缩状态,只需取消刷新操作:

remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );

您现在可以手动调用,并保持 zlib 压缩状态。ob_end_flush()


答案 2

我不建议完全禁用该功能,我绝对不会在您的文件中关闭。下面是一种更好的方法,可以替换导致问题的源代码,并保留基础功能:wp_ob_end_flush_all()zlib.output_compressionphp.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() );
} );

有关原因的更多详细信息,以及为什么这可能是最好的方法,可以在这里找到:WordPress的快速修复ob_end_flush()错误


推荐