Qualche giorno fa, lavorando ad un sito per un cliente, mi è capitato un errore mai visto prima: ob_end_flush(): failed to send buffer of zlib output compression (1). Dopo aver ricercato in lungo ed in largo sul web, sono arrivato ad una soluzione anche grazie a questo provvidenziale link.
Da cosa nasce l’errore ob_end_flush?
L’errore è dovuto da un errore con la compressione zlib. Quando visualizziamo questo errore, probabilmente, un plugin o un blocco del templates che utilizziamo sul nostro sito in WordPress, non viene compresso correttamente: per questo motivo la compressione fallisce, e si genera questa tipologia di errore.
Come posso risolvere l’errore?
Tendenzialmente, ci sono due metodi per risolvere il problema: disattivare la compressione zlib direttamente dal server, oppure intervenire manualmente.
La prima opzione, onestamente, la sconsiglio: disabilitare un’ottima funzione di compressione, per eliminare un warning, non è una pratica corretta. Tramite il file functions.php, però, possiamo far si che l’errore scompaia, inserendo una semplice riga di testo.
L’idea è di sostituire la funzione nativa di WordPress, chiamata wp_ob_end_flush_all(), con una nuova che non darà l’errore ob_end_flush.
/**
* 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() );
} );
Incollate questa porzione di codice nel vostro file functions.php, e come per magia l’errore ob_end_flush scomparirà dal vostro sito web!