OVH Cloud OVH Cloud

Au sujet de ob_start() et suite ..

3 réponses
Avatar
AAA
Bonjour,
ob_start(), ob_flush() ou flush() ?
Apparemment rien ne peut envoyer le flux à l'affichage du navigateur (IE6).
J'ai fait toute sorte de script de test pour en déduire que ces fonctions ne
peut piloter le navigateur.
Quelqu'un est-il arrivé à la même conclusion ?
merci de me faire part de vos expériences.
IB

3 réponses

Avatar
dwojylac.nospam
AAA wrote:

Bonjour,
ob_start(), ob_flush() ou flush() ?
Apparemment rien ne peut envoyer le flux à l'affichage du navigateur (IE6).
J'ai fait toute sorte de script de test pour en déduire que ces fonctions ne
peut piloter le navigateur.
Quelqu'un est-il arrivé à la même conclusion ?
merci de me faire part de vos expériences.


ben si cela fonctionne parfaitement.
je ne vois pas pourquoi le navigateur interviendrait. C'est côté serveur
que ça se passe. Mise en buffer des données et redirection vers un
fichier puis libération vers le navigateur par exemple

exemple :
// en aval fabrication des données

// debut bufferisation
ob_start();
// mon_template.php contient des echo $my_data,..
// un template avec du html et du php et tout ce qu'on veut
include('montemplate.php');

// on recupère dans $data le contenu du buffer
$data = ob_get_contents();
// on ecrit dans un fichier $file les données contenues dans $data
$fp = fopen ($file,'w');
fwrite($fp,$data);
fclose($fp);
// on libère les données vers le navigateur
ob_end_flush();

Cela permet de mettre en statique un fichier et eviter de le regénerer à
chaque fois si les données ne changent pas.

ou une autre utilisation

// mise en buffer
// des calculs
// libération
// d'autres calculs
// liberation

voir

http://www.nexen.net/docs/php/annotee/function.ob-start.php?lien=obstart
et la suite
--
Dominique
http://wojylac.free.fr

Avatar
Sebastien
AAA wrote:
Bonjour,
ob_start(), ob_flush() ou flush() ?
Apparemment rien ne peut envoyer le flux à l'affichage du navigateur (IE6).
J'ai fait toute sorte de script de test pour en déduire que ces fonctions ne
peut piloter le navigateur.
Quelqu'un est-il arrivé à la même conclusion ?
merci de me faire part de vos expériences.


Après un flush( ), ou équivalent, le flux de données part bien du
serveur (en théorie, voir mod_gzip, etc.), ensuite le navigateur en fait
ce qu'il veut.
Pour le principe, quand tu envoies un <table> le navigateur peut très
bien attendre le </table> avant d'afficher quoi que ce soit du tableau,
histoire de savoir comment le rendre.
Bref, un flush( ) ne veut pas dire "affiche-moi ces données", il faut
aussi prendre en compte l'agent utilisateur.

Avatar
loufoque
AAA a dit le 01/12/2004 15:05:

ob_start(), ob_flush() ou flush() ?
Apparemment rien ne peut envoyer le flux à l'affichage du navigateur (IE6).


<?php

ob_end_flush();

echo "Patientez quelques secondes...n";
flush();
sleep(3);

echo "C'est bon !n";

?>

Cela fonctionne parfaitement.
En fait, PHP active tout seul l'output buffering sans rien demander,
donc pour faire du flush il faut le désactiver.