IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Utilisation du tampon de sortie en PHP


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    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/

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ob_start();
    imagejpeg($imageBase);
    $string = ob_get_contents();
    ob_end_clean();
    Ce qui, mis en situation donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Ne pas oublier qu'un ob_get_clean est plus simple que ob_get_contents + ob_end_clean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ob_start();
    imagejpeg($imageBase);
    $string = ob_get_contents();
    ob_end_clean();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ob_start();
    imagejpeg($imageBase);
    $string = ob_get_clean();

Discussions similaires

  1. [SQL] Utilisation des opérateurs SQL plutôt que PHP
    Par php_newbie dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/05/2006, 11h38
  2. Utilisation en ligne de commande de php ?
    Par JavaAcro dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 13/03/2006, 12h20
  3. [Console] Tampon de sortie et endl
    Par Évariste Galois dans le forum C++
    Réponses: 18
    Dernier message: 09/07/2005, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo