47 votes

Afficher les résultats pendant que script est toujours en cours d'exécution.

Actuellement, pour voir les résultats, je dois attendre que l'ensemble du code soit exécuté. Il se suspend jusqu'à ce qu'il soit complet et reste en chargement. Une fois qu'il est terminé, il montre toutes les informations que je cherchais . Y a-t-il un moyen d'afficher ces informations pendant que le script est toujours en cours d'exécution ? Donc disons que si j'ai un print quelque part en haut de mon code, je veux qu'il s'affiche quand il est appelé et non quand le script a fini de s'exécuter.

Quelqu'un sait comment faire ?

Gracias

0 votes

Parlez-vous d'ajax ou de php ?

71voto

Rob Agar Points 5793

Vous pouvez utiliser mise en mémoire tampon des sorties comme ça :

ob_start();

echo('doing something...');

// send to browser
ob_flush();

// ... do long running stuff
echo('still going...');

ob_flush();

echo('done.');
ob_end_flush();

6 votes

Cela a fonctionné pour moi après avoir ajouté ob_implicit_flush(true) avant ob_start() ;

0 votes

J'ai dû ajouter ob_implicit_flush(true) et aussi définir output_buffering = Off dans le php.ini.

0 votes

ADD flush(); dans certains serveurs web, le ob_flush() ne signifie pas que le tampon sera envoyé à Apache. affleurant

10voto

claudio Points 1745

Celui-ci a fonctionné pour moi : ( fuente )

function output($str) {
    echo $str;
    ob_end_flush();
    ob_flush();
    flush();
    ob_start();
}

0 votes

Oui, c'est la réponse qui fonctionne pour le navigateur Chrome, Mac OS.

0 votes

Merci, ça a marché pour moi aussi dans Chrome J'ajoute également ob_implicit_flush(true) à la première ligne.

3voto

fab Points 1654

Vous pouvez le faire avec la mise en mémoire tampon de sortie. Activez le buffer de sortie en haut de votre script avec ob_start() . Cela permet à PHP de ne pas envoyer de sortie au navigateur. Au lieu de cela, elle est stockée en interne. Videz votre sortie à tout moment avec ob_flush() et le contenu sera envoyé au navigateur.
Mais n'oubliez pas que la mise en mémoire tampon de la sortie est influencée par de nombreux autres facteurs. Je pense que certaines versions de IIS attendront que le script soit terminé, ignorant la mise en mémoire tampon de sortie. Et certains logiciels antivirus du côté client (Était-ce Panda ?) pourrait attendre que la page soit entièrement chargée avant de la transmettre au navigateur.

2voto

agold Points 4135

J'ai dû mettre les deux ob-flush y flush comme indiqué dans cet exemple :

for($i=10; $i > 0; $i--)
{
    echo "$i ...";
    flush();
    ob_flush();
    sleep(1);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X