Gérer les flux de sortie en PHP
PHP peut bloquer l’envoi des données au navigateur grâce à la fonction ob_start() qui enclenche une temporisation de sortie. Cela signifie que les données ne sont pas directement envoyées mais temporairement mises en tampon.
ob_start(); /* On initialise le tampon. */
Important : PHP vide automatiquement les tampons de sortie ouverte quand il atteint la fin d’un script.
Récupérer le contenu du tampon
L’intérêt de la temporisation est de pouvoir travailler sur le contenu avant de l’envoyer au navigateur.
La fonction ob_get_clean() permet de retourner les données, de les détruire, et de fermer le tampon.
ob_start(); /* On initialise le tampon. */
echo 'je suis dans le buffer'; // ne s'affiche pas et mis en tampon
$recup = ob_get_clean(); // Arrêt de la temporisation et renvoi du tampon de sortie
echo 'Voici du texte mis dans dans le tampon : '.$recup;
Affichage
Voici du texte mis dans dans le tampon : je suis dans le buffer
La fonction ob_get_contents() permet de retourner les données sans les détruire et ne ferme pas le tampon.
ob_start(); /* On initialise le tampon. */
echo 'je suis dans le buffer'; // ne s'affiche pas et mis en tampon
ob_get_contents(); // renvoi les données
echo ' et moi aussi ' ;
$chaine = ob_get_clean(); // Arrêt de la temporisation et renvoi du tampon de sortie
echo 'Finalement : '.$chaine;
Affichage
Finalement : je suis dans le buffer et moi aussi
La fonction ob_flush() permet de retourner les données, d’effacer le contenu, mais ne ferme pas le tampon.
ob_start(); /* On initialise le tampon. */
echo 'Premier'; // ne s'affiche pas et mis en tampon
ob_flush(); // renvoi les données
echo ' Deuxième ' ;
$chaine = ob_get_clean(); // Arrêt de la temporisation et renvoi du tampon de sortie
echo ' et enfin : '.$chaine;
Affichage
Premier et enfin : Deuxième
La fonction ob_end_flush() permet de retourner les données, d’effacer le contenu, et ferme le tampon.
ob_start(); /* On initialise le tampon. */
echo 'Premier'; // ne s'affiche pas et mis en tampon
ob_end_flush(); // renvoi les données, temporisation vidée et fermée
echo ' Deuxième ' ;
$chaine = ob_get_clean(); // retourne false
echo ' et enfin : '.$chaine;
Affichage
Premier Deuxième et enfin :
Détruire le contenu du tampon
La fonction ob_end_clean() permet de détruire les données et ferme le tampon.
ob_start();
echo 'Texte qui ne sera pas affiché.';
ob_end_clean();
Affichage
(pas de contenu)
La fonction ob_clean() permet de détruire les données mais ne ferme pas le tampon.
ob_start();
echo 'Texte qui ne sera pas affiché.';
ob_clean();
echo '...autre texte';
$chaine = ob_get_clean(); // Arrêt de la temporisation et renvoi du tampon de sortie
echo 'Voici le contenu du buffer : '.$chaine;
Affichage
Voici le contenu du buffer : ...autre texte