Maison  >  Article  >  développement back-end  >  PHP exécute des scripts fastidieux et génère du contenu en temps réel

PHP exécute des scripts fastidieux et génère du contenu en temps réel

藏色散人
藏色散人avant
2019-10-24 14:22:071999parcourir

Nous avons parfois une telle exigence. Lors de l'exécution d'un script qui prend du temps, les données ne seront sorties qu'après l'exécution du script. S'il n'est pas traité, il mettra en cache le contenu de la page dans la mémoire jusqu'à ce qu'il soit mis en cache. est traité. Il sera exécuté plus tard. Ici, nous avons besoin d'une sortie en temps réel.

flush — Vide le tampon de sortie

Vide le tampon du programme PHP quel que soit le contexte dans lequel PHP est exécuté (CGI, serveur web, etc.). Cette fonction envoie toutes les sorties du programme jusqu'à présent au navigateur de l'utilisateur. La fonction

flush() n'a aucun effet sur le mode cache du serveur ou du navigateur client. Par conséquent, les fonctions ob_flush() et flush() doivent être utilisées pour vider le tampon de sortie.

Certains programmes de serveur web, notamment ceux sous Win32, mettront toujours en cache la sortie du script jusqu'à la fin du programme avant d'envoyer les résultats au navigateur.

Certains modules Apache, tels que mod_gzip, peuvent mettre en cache leur propre sortie, ce qui empêchera les résultats générés par la fonction flush() d'être envoyés immédiatement au navigateur client.

Même le navigateur mettra en cache le contenu reçu avant de l'afficher. Par exemple, le navigateur Netscape met le contenu en cache jusqu'à ce qu'il reçoive un saut de ligne ou le début d'une balise HTML, et n'affiche pas l'intégralité du tableau tant qu'il n'a pas reçu une balise f16b1740fad44fb09bfe928bcc527e08.

Certaines versions de Microsoft Internet Explorer ne commenceront à afficher la page qu'après avoir reçu 256 octets, donc des espaces supplémentaires doivent être envoyés pour permettre à ces navigateurs d'afficher le contenu de la page.

Si une sortie en temps réel est requise, deux fonctions principales ob_flush, flush;

<?php
 // echo phpinfo();
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i<10; $i++){
    echo "<br> Line to show.";
    echo str_pad(&#39;&#39;,4096)."\n";
    ob_flush();
    flush();
    sleep(2);
}
echo "Done.";
ob_end_flush();

Recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer