Précédent   Forum des professionnels en informatique > PHP > Langage > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc. pour PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 10/02/2011, 17h20   #1
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 597
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 597
Points : 5 015
Points : 5 015
Par défaut Utilisation du tampon de sortie en PHP

Lors du déclenchement d'un affichage en PHP (echo, var_dump(), printf() ou toute autre fonction), la chaine à afficher ne part pas directement vers l'affichage.
Elle est en réalité stockée dans différentes piles appelées "tampons", sur lesquelles l'utilisateur a un contrôle plus ou moins fin.
Lorsque le dernier tampon tout en bas est vidé, l'affichage est alors envoyé à un endroit, en fonction de la SAPI utilisée. Par exemple pour CLI, il s'agira de la sortie
standard: la chaine est affichée à l'écran.
Nous allons ici détailler les différentes couches de tampon, leur utilisation et leur impact sur le code PHP.

http://julien-pauli.developpez.com/tutoriels/php/ob/
__________________
.: Expert contributeur certifié PHP/ZF :.
Mes articles - Twitter - GitHub
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 11/02/2011, 08h59   #2
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Très bon article !

J'étais jusqu'il y'a pas très longtemps plutôt sceptique quant à l'utilité réelle des tampons de sortie.
Je n'avais jamais eu besoin de les utiliser...

Jusqu'au jour , ou pour un projet j'ai eu besoin de créer un fichier zip contenant des images elles même générée par php , le tout sans écrire les images sur le disque.
Comme GD ne peut pas sérialiser une image en string il m'a suffit de passer par les buffer de sortie :
Code :
1
2
3
4
ob_start();
imagejpeg($imageBase);
$string = ob_get_contents();
ob_end_clean();
Ce qui, mis en situation donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$zip = new ZipArchive(); 
$op = $zip->open('test.zip',ZipArchive::CREATE); 
foreach($ids as $id)
{ 
	ob_start(); 
	$data  		= $bd->getById($id); 
	$imageBase  = $bd->generateImage($data); 
	imagejpeg($imageBase); 
	$zip->addFromString($data->id.'.jpg',ob_get_contents()); 
	ob_end_clean(); 
}
$zip->close();
Depuis , le disque dur remercie les buffers de lui epargner moultes écritures
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 10h09   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Ne pas oublier qu'un ob_get_clean est plus simple que ob_get_contents + ob_end_clean

Code :
1
2
3
4
ob_start();
imagejpeg($imageBase);
$string = ob_get_contents();
ob_end_clean();
Code :
1
2
3
4
 
ob_start();
imagejpeg($imageBase);
$string = ob_get_clean();
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h59.


 
 
 
 
Partenaires

Hébergement Web