Anticiper l'affichage Echo en php

Résolu

Bonjour,

J'ai un script php qui dure "un certain temps".
Il envoie ses résultats au fur et à mesure via Echo.
Je ne vois la page qu'une fois que tout est terminé.

Est-il possible de voir le résultat des Echo en temps réel ?
J'ai essayé d'ajouter ob_flush() dans la boucle mais ça ne change rien.

Rerci

4 réponses

  1. Contributeur

    bonjour,

    C'est probablement le navigateur qui attend avant d'afficher les résultats.

    0
    1. Ben oui, c'est ma question : comment forcer l'affichage ?

      0
      1. Modérateur

        Bonjour,

        Tu dis avoir utilisé ob_flush

        mais as tu mis un ob_start(); ? et un ob_implicit_flush() ?

        par exemple

        <?php
          ob_start(); // not needed if output_buffering is on in php.ini
          ob_implicit_flush(); // implicitly calls flush() after every ob_flush()
        
          echo "This output is buffered.\n";
          echo "As is this.\n";
        
          for ($i = 0; $i < 10; $i++)
          {
            echo "$i\n";
            ob_flush();
            sleep(1);
          }
        ?>

        Voir la doc : https://www.php.net/manual/fr/function.ob-implicit-flush.php


        0
        1. Ton exemple donne "This output is buffered. As is this. 0 1 2 3 4 5 6 7 8 9" qui s'affiche d'un coup après 10 secondes.

          J'utilise habituelles Chrome; j'ai essayé avec Firefox et Edge : idem.

          Voici php.ini

          <?php
          date.timezone = "Europe/Brussels"
          file_uploads = On
          ?>
          
          0
        2. Contributeur
          @Herve_be

          Le problème vient du serveur: le serveur n'envoie rien pendant 10 secondes, puis tout en une fois.

          0
      2. J'ai ajouté

        echo str_repeat(' ',1024*64);

        ceci force le serveur à envoyer le buffer parce qu'il est plein.

        ça fonctionne, problème résolu.

        0