处理WordPress ob_end_flush报错后出现wp_ob_end_flush_all未找到错误怎么办
WordPress缓冲区报错排查解决指南
报错根因说明
- 第一个
ob_end_flush()zlib压缩报错:PHP服务端开启的zlib输出压缩功能,与WordPress核心默认的输出缓冲区刷新逻辑冲突,核心函数wp_ob_end_flush_all强制刷新所有层级缓冲区时,和zlib的缓冲区处理规则不匹配触发提示。 - 第二个
call_user_func_array()回调无效报错:你之前的修复操作违规修改了核心文件,要么误删了wp_ob_end_flush_all的核心函数定义,要么移除默认钩子后错误注册了不存在的同名回调,导致WordPress执行shutdown钩子时找不到对应函数。
分步解决步骤
先修复回调无效报错,恢复核心文件完整性
不要修改WordPress核心目录(wp-includes、wp-admin)下的任何文件,将你之前改动过的wp-includes/functions.php恢复为对应WordPress版本的原生文件,确保wp_ob_end_flush_all函数定义存在,即可消除第二个警告。合规修复zlib压缩缓冲区报错,二选一即可
- 方案1:关闭PHP的zlib输出压缩
编辑站点php.ini配置,将zlib.output_compression设置为Off;虚拟主机用户可在站点根目录的.htaccess文件中添加以下配置:
php_flag zlib.output_compression Off- 方案2:不关闭zlib,自定义缓冲区刷新逻辑覆盖默认规则
在站点当前激活主题的functions.php文件,或者自定义功能插件中添加以下代码即可:
// 移除WordPress默认缓冲区刷新逻辑 remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 ); // 新增兼容zlib压缩的缓冲区刷新逻辑 add_action( 'shutdown', function() { $buffer_levels = ob_get_level(); for ( $i = 0; $i < $buffer_levels; $i++ ) { if ( ob_get_length() !== false ) { ob_end_flush(); } } }, 1 );- 方案1:关闭PHP的zlib输出压缩
验证生效
清理站点所有缓存(页面缓存、对象缓存、CDN缓存)后刷新页面,两个报错即可全部消除。
注意事项
所有自定义功能修改都要放在主题目录、子主题目录或者自定义插件中,不要改动WordPress核心文件,避免后续版本更新覆盖改动、或引发核心逻辑异常。
内容的提问来源于stack exchange,提问作者Sina
相关产品推荐
相关产品推荐

