Aller au contenu

[RESOLU] [PHP] Temporisation de sortie

Featured Replies

Posté(e)

Salut ,

J’ai un petit problème avec une fonction qui sauvegarde le résultat de l'inclusion d'un fichier dans une variable.

Cela ne marche tout simplement pas enfin la temporisation se fait seulement

il me l’affiche en même temps qu’il stock dans le buffer.

Un exemple tout simple ce code m’affiche deux fois « salut »

ob_start();
echo "salut"; //ce echo est envoye au navigateur 
$out = ob_get_flush();
exit($out); //plus celui du buffer  

si quelqu'un peut m’aider SVP

merci d’avance

PS j'ai essaye sous windows :PHP/5.3.2 ZendServer

et sous ubuntu :

Server:nginx/0.7.67

Transfer-Encoding:chunked

X-Powered-By:PHP/5.3.5

Posté(e)

Vous êtes sûr de votre code ?

Car dans le manuel, il ne parle pas de mettre un exit() à la fin, mais un ob_end_flush...

PS : je ne fais que supposer, car je ne connais pas du tout cette fonction

Posté(e)
  • Auteur

ob_get_flush() est similaire à ob_end_flush(), sauf que cette fonction retourne le tampon en tant que chaîne

je peux remplacer le exit par un echo j'aurai le même résultat . :pleure:

Posté(e)

Sur un serveur de tests, ça me faisait pareil, alors j'ai vu que quelqu'un dans les commentaires du manuel a posté un exemple, et je m'en suis inspiré :

<?php
ob_start();
echo "salut"; //ce echo est envoye au navigateur 
$out = ob_get_flush();
ob_clean();
echo $out; //plus celui du buffer
?>

Grâce à ob_clean() avant d'utiliser la variable, cela semble fonctionner et c'est affiché une seule fois.

Pareil chez vous ?

Posté(e)
  • Auteur

Oui j'ai le même résultat que vous .

le problème reste maintenant l'inclusion de fichier

<?php
ob_start();
include_once("fichierdevue.php"); //traitement de la vue
$out = ob_get_flush();
ob_clean();
//puis utilisation de $out dans un layout
?>

J’avais essayé avec un echo juste pour le debug.

comme la solution propose dans ce topic

il y'a aussi l'exemple du site officiel exemple #6

qui ne marche pas pour moi malgre l'absence de echo

Posté(e)
  • Auteur

J'ai résolu mon problème .en fait l’utilisation de ob_end_flush envoi le buffer au navigateur .donc j’ai utilisé ob_end_clean pareil pour ob_get_flush qui retourne une chaine mais aussi envoi au navigateur.

la doc php n'est pas tres clair a ce sujet surtout ici

Il n'est dit nulle part que la sortie est envoyée au navigateur aussi.

Voila mon code qui marche pas de flush :transpi:

ob_start();
$Ctr_name = explode("ctr_",$this->_controller_name);		
$Ctr_name  = $Ctr_name[1];
include $Ctr_name.'/V_'.$this->view.'.php';	
$content_for_layout = ob_get_contents();
ob_end_clean();	
ob_start();
include 'l_'.$this->layout.'.php';
$content = ob_get_contents();
ob_end_clean(); 
return $content;

Merci Amour :smack::transpi:

Posté(e)

Ce fichierdevue.php contient quel genre de script ?

Que souhaitez-vous comme résultat final ?

Edit : répondu trop tard, mais tant mieux finalement :francais::transpi:

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.