Journal du Net Développeur >  PHP >  Exploiter la bufferisation de sortie de PHP

Exploiter la bufferisation de sortie de PHP > 2. Compression avec gzip

Précédente Présentation
A. Ajouter la compression gzip
  1. <?php
  2. ob_start("ob_gzhandler");
  3. // Le reste des traitements PHP
  4. ob_end_flush();
  5. ?>
B. Placer une fonction callback personnelle
  1. <?php
  2. ob_start("maFonctionRegexp");
  3.  
  4. function maFonctionRegexp($contenu) {
  5.   traiter($contenu);
  6.   }
  7. ?>

L'output buffering peut également servir à la compression des données, et donc à l'optimisation de la transmission des pages. Quasiment tous les serveurs proposant PHP ont également accès à la compression gzip en sortie, et PHP, depuis sa version 4.0.4, dispose de la fonction ob_gzhandler(), qui gère directement l'envoi de données compressées dans le tampon. Par sécurité, si le navigateur ne reconnaît pas l'encodage gzip, cette fonction ne compresse pas les données.

A. ob_gzhandler() ne s'utilise pas tel quel, mais en combinaison avec ob_start() : ob_gzhandler() agit comme une fonction de callback, c'est-à-dire une fonction utilisée en argument d'une autre. Il suffira donc de commencer la mise en tampon avec ob_start("ob_gzhandler").

Cette technique permet de mettre en place la compression d'une page PHP, sans devoir faire appel à mod_gzip, qui n'est pas forcément disponible sur le serveur. Les taux de compression pouvant facilement atteindre les 80%, cette technique alternative devrait prouver son intérêt.

B. Enfin, toute fonction placée en argument de ob_start() sera appliquée de la même manière au contenu du tampon. On pourra par exemple créer une fonction de traitement du texte par expression régulière, et chaque chaîne ajoutée au tampon passera par cette fonction. La fonction de callback ainsi créée pourra prendre en compte le contenu du tampon en argument.

Précédente Retour au sommaire Présentation
1 | 2 | 3
 
|
Haut de page
Nos autres sites Société | Mentions légales | Contacts | Publicité | PA Emploi | Presse | Recrutement | Tous nos sites | Données personnelles
© Benchmark Group, 69/71 avenue Pierre Grenier. 92517 Boulogne Billancourt Cedex