15 Mai 2020
Comment corriger l'erreur ob_end_flush sur Wordpress

Corriger l’erreur ob_end_flush sur WordPress

Début mai j’ai déplacé mon site sur un nouveau serveur avec la dernière version de PHP. En plus de cela j’ai mis à jour mon WordPress et mon Woocommerce, il est maintenant au top ! Dès que j’ai voulu importer une image dans les médias de mon WordPress, j’ai eu droit à une erreur : ob_end_flush. Suite à mes recherches, je l’ai corrigé et voici comment :

Pourquoi j’ai l’erreur ob_end_flush : failled… sur WordPress ?

Voici l’erreur exacte :

ob_end_flush(): failed to send buffer of zlib output compression (1)

Ce message apparaît quand votre thème ou bien un de vos plugins WordPress utilise la mise en mémoire tampon des données. Elles sont compressées via Zlib et c’est là que ça peut coincer.

Il est donc ensuite impossible de télécharger des fichiers vers votre site internet.

Corriger l’erreur zlib avec le function.php

Cette option est la plus recommandée sur WordPress. Nous allons modifier la fonction dans votre thème au lieu de la supprimer complètement.

Vous devez ouvrir votre function.php et intégrer ce bout de code pour corriger le problème.

/**
 * 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() );
} );

Si cela ne fonctionne pas il va falloir modifier le fichier php.ini présent de votre serveur.

Désactiver zlib dans le fichier php.ini

Vous avez testé la solution au-dessus et cela ne fonctionne pas ? Il va falloir donc modifier le fichier php.ini sur votre serveur.
Vous devez ouvrir votre fichier php.ini à la racine de votre site (ou bien au même endroit que le dossier /www).

Cherchez la ligne zlib.output_compression et placez le sur off.

zlib.output_compression = Off

Attention, j’ai pu lire que désactiver cette option peut avoir un impact sur le SEO. Cette compression permet d’envoyer au navigateur web les données de votre site en format compressé pour réduire le temps de chargement.

Vous avez besoin d’aide pour corriger votre erreur ob_end_flush ?

– Connexion à votre serveur
– Modification de votre function.php
– Test de fonctionnement

Vous pouvez acheter un ticket de support Worpress pour que j’intervienne sur votre site.

7 commentaires sur “Corriger l’erreur ob_end_flush sur WordPress
  1. Bonjour,

    Je suis débutant et je monte un site en local avec wordpress, du jour au lendemain je tombe sur cette erreur lorsque je souhaite installer des extensions comme Woo commerce ou même faire la mise à jour wordpress. Les 2 modifs citées dans votre post n’ont pas eu d’effets, j’ai toujours ce message d’erreur.

    ob_end_flush(): failed to send buffer of zlib output compression (1)

    Merci de vote aide.

    1. Il faut suivre ce tutoriel et corriger le problème.
      Cela est dû en général à une config de l’hébergeur et dans votre cas en local.

      Ouvrez votre function.php dans votre thème et ajoutez le code ci-dessus.

  2. J’ai le bug quand j’installe une extension comme Woocommerce ou bien la mise à jour de WordPress. Ensuite, j’ai recrée mon à partir de zéro, en téléchargeant directement la dernière versionde wordpress, mais le résultat est le même pour l’extension WooCommerce. Certaines petites extensions s’installe correctement.

    Dans le function.php, j’ai remplacé le bout de code :

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

    par :

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

    puis dans le php.ini j'ai passé : zlib.output_compression = Off

    mais malgré tout : j'ai le message suivant :

    Fatal error: Uncaught Error: Call to undefined function wp_ob_end_flush_all() in C:\MAMP\htdocs\…

    Je ne comprends pas… Je suis à cours d'idées…

    1. Et si je laisse les 2 bouts de codes, j’ai :

      L’authenticité de woocommerce.4.9.0.zip n’a pas pu être vérifiée car aucune signature n’a été trouvée.

      C’est peut être un second problème indépendant?

      Merci pour votre page qui oriente bien en tout cas…

      1. Si cela ne fonctionne pas il faut faire via le serveur et non le thème WP.
        Via un fichier php.ini comme dans mon article ou en demandant à votre hébergeur.

        Si c’est juste pour installer un plugin, vous pouvez le dézipper et l’installer via le serveur, ça fonctionnera immédiatement.

        Si vous ne maitrisez pas l’utilisation de votre serveur via FTP, je vous conseille de faire appel à un professionnel

  3. Pour compléter ton guide qui ne ma pas permis de résoudre le problème, mais m’a dirigé vers la source du problème.

    Si même avec les 2 manières dont tu as stipulé cela ne fonctionne pas.

    Utiliser cette 3ème méthode :

    1- Ouvrir la fonction php et de trouver ce code :
    **
    * Flush all output buffers for PHP 5.2.
    *
    * Make sure all output buffers are flushed before our singletons are destroyed.
    *
    * @since 2.2.0
    */
    function wp_ob_end_flush_all() {
    $levels = ob_get_level();
    for ( $i = 0; $i < $levels; $i++ ) {
    ob_end_flush();
    }
    }

    Supprimer "ob_end_flush();" et remplacer ce code par :
    remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );

    Merci à toi pour l'aide en tout cas !

    1. Merci pour ce retour.
      C’est assez rare mais oui, cette solution doit fonctionner pour des personnes ayant une version PHP ancienne (Flush all output buffers for PHP 5.2.)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *