Developpez.com

Plus de 2 000 forums
et jusqu'à 5 000 nouveaux messages par jour

Les fonctions de manipulation du tampon de sortie (buffer)


précédentsommairesuivant

II. Première approche

II-A. Les fonctions de Bufferisation de sortie

Le buffer c'est ce flux d'informations que votre serveur envoie vers le navigateur du client.

Lorsque vous vous écrivez :

 
Sélectionnez

echo 'Hello World!';

vous ajoutez au buffer la chaine de caractère "Hello World!".

Il est possible, dans une certaine mesure, de contrôler ce buffer. Cela peut être très pratique, notamment lors de l'utilisation de la fonction header() au milieu de notre code.
En effet, en vidant le buffer de la page avant d'effectuer le header(), vous pourrez utiliser cette fonction n'importe où dans votre code.

 
Sélectionnez

//
// exemple de redirection sans la gestion du buffer
 
//
// écrire dans notre page
echo 'ceci est du texte';
 
//
// redirigier le visiteur
header("Location: http://www.developpez.com");
 
// => ERREUR

la redirection ne marche pas : il y a une alerte parce que des entêtes ont déjà été envoyés au navigateur.

Maintenant, utilisons les fonctions de gestion de la Bufferisation de sortie :

 
Sélectionnez

//
// exemple de redirection AVEC la gestion du buffer
 
//
// démarrer la temporisation
ob_start();
 
//
// écrire dans notre page
echo 'ceci est du texte';
 
//
// vider le contenu du buffer
ob_clean();
 
//
// redirigier le visiteur
header("Location: http://www.developpez.com");
 
// => tout est OK

Cette fois, aucune erreur : nous avons vidé le buffer avant d'effectuer notre redirection.

La gestion de la Bufferisation s'effectue avec la fonction ob_start(). Cette fonction temporise l'envoi du flux (du buffer), de telle sorte qu'on puisse envoyer le buffer d'un seul coup, soit à la fin de notre code (ce qui se fait automatiquement), soit à un moment de notre choix.

Voici la liste des principales fonctions de gestion de la Bufferisation de sortie :

Fonction Description
ob_start() Démarre la temporisation du flux. A placer en début de code
ob_get_contents() Retourne le buffer (temporisé)
ob_clean() Vider le buffer. Utile, par exemple, pour utiliser la fonction header()
ob_get_clean() Retourne le buffer et le vide. Equivalent de ob_get_contents() + ob_clean()
ob_flush() Envoie le buffer (temporisé)


Examinons maintenant ce qu'il est possible de faire grâce à ces fonctions, en développant une petite Classe de génération de scripts JavaScript.

II-B. Exemple : remplacer du texte

Imaginons que nous voulions, pour une raison ou une autre, remplacer toutes les occurences de "toto" sur la page par "titi" :

 
Sélectionnez

//
// démarrer la temporisation
ob_start();
 
...
 
//
// Notre page contient le mot "toto"
echo 'Hello toto !';
 
//
// récupérer le tampon de sortie et le vider
$content	= ob_get_clean();
 
//
// réécrire le contenu de la page
$content	= str_replace('toto', 'titi', $content);
echo $content;

La page affichera :

 
Sélectionnez

Hello titi !

Nous avons capturé le buffer et l'avons modifié selon nos souhaits. Cela peut être très pratique, par exemple pour ajouter des balises alt et title à toutes les images de la page qui n'en n'ont pas...

II-C. Comment procéder ?

Pour pouvoir réutiliser facilement notre code, nous allons développer une classe. Notre premier souci doit être la facilité d'utilisation de cette classe; le second sa compatibilité avec à peu près n'importe quel script ou framework JavaScript.

La solution que je vous propose de tester est une solution parmi d'autres, et il est possible d'en imaginer de plus efficaces ou plus rapides. Toutefois, notre solution nous permettra de comprendre comment fonctionnent les fonctions de Gestion de buffer de PHP.

Nous allons donc créer une classe générique qui va donner les méthodes principales de toutes les classes filles qui vont hériter d'elle. Cette Classe, jamais instanciée, sera donc abstraite.

Par ailleurs, il est possible d'imaginer qu'on utilise plusieurs fois le même script sur la page (dans le cas, par exemple, de miniatures pour un album photo). Les propriétés et attributs de cette Classe (identifiants des objets HTML, répertoires...) devront donc être partagés par l'ensemble des instances de cette Classe; c'est pourquoi nos méthodes et attributs seront Static.

II-D. Quoi faire et comment ?

Quelles sont les méthodes principales que nous aimerions avoir pour nous simplifier la gestion des scripts JavaScript dans nos fichiers PHP ?

Nous pouvons déterminer quatre points, commun à tous (ou presque) les scripts JavaScript, qui sont indispensables pour la génération de code JavaScript depuis le PHP :

  • Savoir si le script est déjà initialisé dans la page
  • Gérer les variables des scripts (identifiants des objets HTML, configuration, etc.)
  • Ajouter dans la balise head de notre code un appel de fichier (.css ou .js) à n'importe quel moment
  • Ajouter dans la balise head un script JavaScript

Nous allons donc voir comment proposer une solution pour chacun d'entre eux.


précédentsommairesuivant

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Jean-François Lépine. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.