Fixing WordPress's Bug (failed to send buffer of zlib output compression) results in "White Screen of Death"

Problem: A user using my plugin experienced the infamous 'White Screen of Death' (WSD) on their homepage, all other pages worked correctly.

Cause: My plugin implements a fix to the infamous WordPress error ob_end_flush(): failed to send buffer of zlib output compression (1) in ...\wp-includes\functions.php on line 4556, see here for more details and here for the solution I use. This code caused the users WSD. When I removed it, the problem stopped.

My Question: Why did the WSD occur just for this user when the majority of users who use my plugin don't experience this WSD error!? And why does the ob_end_flush() fix cause the WSD error for some users!?

User specifications that might be helpful:

  • User's server is nginx (not apache)
  • User has Bluehost as the server host. Interestingly Bluehost WordPress versions have a caching option native, its not a plugin. Its just an option in Settings-General and the user can select levels - Level 0-2 caching.
  • If I disabled all plugins on the users website except my plugin the error still occurred. If I then disabled my plugin, the error stopped so it was confirmed the issue was due to my plugin and specifically the code fix to WordPress's ob_end_flush() error.
  • User has WP 5.6.1, PHP 7.4.15 and theme Twenty Twenty.

My code that caused the WSD in that specific user (but it doesn't in other users):

add_action('init', function() {
  remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
  add_action( 'shutdown', function() {
    while ( @ob_end_flush() );
  });
});

Topic bug nginx plugin-development plugins Wordpress

Category Web

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.