Make WordPress Core

Opened 7 years ago

Last modified 9 days ago

#22430 reopened defect (bug)

wp_ob_end_flush_all bug when zlib.output_compression = On

Reported by: Matthias Reuter Owned by:
Milestone: Awaiting Review Priority: normal
Severity: major Version: 2.8
Component: General Keywords:
Focuses: Cc:


When zlib.output_compression is set to On, the function wp_ob_end_flush_all throws the following error:

Notice: ob_end_flush() [ref.outcontrol]: failed to delete buffer zlib output compression in /wp-includes/functions.php on line 2683

You can see this error e.g. when opening /wp-login.php in browser.

Critical Issue related to this bug: it also affects usage of /wp-admin/customize.php - the preview results in a blank page. Seems that the error avoids ajax snippets from getting loaded succesfully.

Hotfix is replacing in /wp-includes/functions.php

function wp_ob_end_flush_all() {
	$levels = ob_get_level();
	for ($i=0; $i<$levels; $i++)


function wp_ob_end_flush_all() {
	//$levels = ob_get_level();
	//for ($i=0; $i<$levels; $i++)
	//	ob_end_flush();

This issue occurs in all browsers (ie,ff,opera, etc) with both latest versions of WordPress, 3.4.2 and latest nightly build on a LAMP system with PHP Version 5.3.10-1~dotdeb.0.

PHP zlib settings:

Directive	Local Value	Master Value
zlib.output_compression	On	Off
zlib.output_compression_level	5	-1
zlib.output_handler	no value	no value

Change History (12)

#2 @SergeyBiryukov
7 years ago

  • Keywords needs-patch removed
  • Milestone Awaiting Review deleted
  • Resolution set to duplicate
  • Status changed from new to closed
  • Version changed from trunk to 2.8

Going to close as a duplicate of #18525, which has patches.

The same notice is mentioned in ticket:18525:9.

#3 @Matthias Reuter
7 years ago

  • Resolution duplicate deleted
  • Status changed from closed to reopened

Hi Sergey,

thanks for relating the other tickets to this issue. Currently WordPress per default is not compatible with zlib enabled. While Server-Side-Compression is recommened by search engines and most browsers, the other tickets linked by you recommend either disabling zlib or inserting a hotfix.

I don't want to live with a hotfix over the next years which needs to be re-applied manually with every WordPress update.

I would recommend dropping support for PHP 5.2 (or even check wether PHP 5.3 is on server) to avoid that a compatibility function (wp_ob_end_flush_all()) for PHP 5.2 produces new errors on PHP 5.3 installations with zlib enabled.

So I hope that the developers of WordPress will fix this issue and don't let me hotfix that the next years until PHP 5.2 support is finally dropped.

Kind regards,


#4 @nacin
7 years ago

  • Resolution set to duplicate
  • Status changed from reopened to closed

Rather than hacking core, try this one-line plugin on for size:

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

We may be at the point where we can eliminate this from core. I'll look into it at the start of the 3.6 cycle. Closing this as a duplicate of #18525 makes sense, because that ticket is reporting the same problem. You disagree with the solution, and that's completely fine, but you should voice it there. (For what it's worth, I also don't like the solution, which is why I myself have not committed it.)

#5 @Matthias Reuter
7 years ago

Wow, nacin, this fix works great and I don't need to touch the core - perfect :)

#6 @daveagp
6 years ago

I found nacin's fix to work for me as well. I was experiencing problems with ajax (regardless of whether I used WP's ajax hooks, or I directly called a .php from ajax and had the php load wp-load.php). Thanks!

#7 @Sam_a
5 years ago

Thanks @nacin. I've seen this bug for years and I hope it's eventually fixed in core.

#8 @selnomeria
4 years ago

in documentation comments ( https://core.trac.wordpress.org/browser/tags/4.2.2/src/wp-includes/functions.php#L3279 ) they say that it is needed for PHP 5.2 .

So, i dont know, if other PHP versions doesnt need that function.. I dont know.

Last edited 4 years ago by selnomeria (previous) (diff)

#9 @carasmo
2 months ago

  • Resolution duplicate deleted
  • Status changed from closed to reopened

I'm in WordPress 5.2.2 and PHP 7.1.30 and I'm getting this error at the bottom of all the pages when debug is on. I need it on this is a staging site for troubleshooting. I can't find any help on this very old issue. I've turn off all plugins one by one all the standard troubleshooting and zilch. Switched to 2019, also doesn't address it.


Notice: ob_end_flush(): failed to send buffer of zlib output compression (0) in /home/xxx/staging/wp-includes/functions.php on line 4339

#10 @bobbingwide
12 days ago

I've recently noticed this where my hosting ( TSOhost ) have switched to PHP 7.3 and have set zlib.output_compression=on by default, and where my sites have WP_DEBUG true.

Is it not possible to detect the PHP ini setting and not attach the wp_ob_end_flush_all action function to shutdown when it's set?

Or alter the function to do nothing. e.g.

if ( ini_get( 'zlib.output_compression') ) {
Last edited 9 days ago by bobbingwide (previous) (diff)

This ticket was mentioned in Slack in #core by bobbingwide. View the logs.

12 days ago

#12 @SergeyBiryukov
12 days ago

  • Milestone set to Awaiting Review
Note: See TracTickets for help on using tickets.