Anticiper l'affichage Echo en php

Résolu
Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   -  
Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   -

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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    bonjour,

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

    0
  2. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
     

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

    0
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     

    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. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
       

      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
      1. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11 > Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention  
         

        Ton exemple sur mon serveur est ici https://www.rudyv.be/Aquarium/RVRT/TestFlush.php

        Si tu veux bien l'essayer pour voir si le problème vient du navigateur ou du serveur

        Merci

        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention  
         

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

        0
  4. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
     

    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