Previous Up Next

Chapter 10  PHP Hypertext Preprocessor

10.1  Que peut faire PHP?

Le langage PHP possède les même fonctionnalités que les autres langages permettant d'écrire des scripts CGI , comme collecter des données, générer dynamiquement des pages web ou bien envoyer et recevoir des cookies (variable placée par le serveur chez le client permettant de simuler une session entre deux transactions HTTP ).

La plus grande qualité et le plus important avantage du langage PHP est le support d'un grand nombre de bases de données. Réaliser une page web dynamique interfacant une base de donnés est extrêmement simple.

Les bases de données suivantes sont supportées par PHP :
Adabas InterBase PostgreSql
dBase FrontBase Sesam
Empress mSQL Solid
FilePro Direct MS-SQL Sybase
Hyperwave MySQL Velocis
IBM DB2 ODBC Unix dbm
Informix Oracle Ingres





Le langage PHP inclus le support des services utilisant les protocoles tels que IMAP, SNMP, NNTP, POP3 ou encore HTTP.

Grâce à de nombreuses extensions, PHP peut générer des fichiers PDF, s'interfacer avec des serveurs de messagerie, des serveurs LDAP ou encore générer des images et graphiques GIF à la volée, et gérer des sessions pour ne citer que quelques unes de ses fonctionnalités.


Sa syntaxe s'inspire largement du langage C, tout en présentant certains traits de parenté avec java (objet) et perl (string).

Il est disponible sous Unix , Windows, MacOS , OSX, OS/2, BeOS.


En Janvier 2000, PHP est distribué avec de nombreux produits commerciaux comme "RedHat Linux" et est utilisé sur 5 100 000 sites web dans le monde entier, ce chiffre est légèrement supérieur au nombre de serveurs tournant sous Microsoft Information server (IIS) : 5.03 millions. En Mai 2002 45% des sites apaches sont équipés du module PHP (perl 25%)


Langage interprété, il convient autant au débutant, désireux de se familiariser avec les techniques du web dynamique, qu'au professionnel cherchant une solution simple, puissante et fiable pour des sites de taille moyenne.

10.2  Fonctionement de PHP

Le code PHP fait partie intégrante du fichier. L'utilisateur qui appelle une page PHP ignore le code PHP qu'elle contient, ce code ayant été interprété coté serveur, avant d'être traduit en code HTML .

Pour ce faire le serveur lance l'interpréteur PHP qui traduit le document demandé, à l'issu de ce traitement la page modifiée est envoyée au client.

Le serveur reconnaît un document PHP par son extension fichier (.php)

Les pages peuvent être plus lentes à afficher, vu qu'il faut interpréter le code du script, avant de l'afficher, toutefois la majorité des scripts font appels à des API PHP qui sont écrits en langage C.



Exemple: soit le script PHP

Votre navigateur est: <? echo $HTTP_USER_AGENT ?>


Le résultat:

Votre navigateur est: Mozilla/4.78 [fr] (X11; U; Linux 2.4.18 i686)

10.3  Utilisation de PHP

Reconnaissance du code PHP dans un document HTML :

Plusieurs possibilités sont offertes, elles sont toutes équivalentes : et permettent de passer du HTML vers php en quelques caractères:
   <? if(strstr($HTTP_USER_AGENT,"MSIE")) { ?>        // php code
        <b>Vous utilisez Internet Explorer</b>        // html code
   <? } else { ?>                                     // php code
        <b>vous n'utilisez pas Internet Explorer</b>  // html code
   <? } ?> 

Commentaires, et instructions

 // ceci est un commentaire
 /* ceci aussi */
  
Les instructions se terminent par un " ;"
  <?
     mysql_pconnect("db.server.com","username","password");
     mysql_select_db("products");
     $result = mysql_query("SELECT * FROM details");
     if ($result) {
        echo "<TABLE>\n";
        echo "<TR><TH>Nom</TH><TH>Description</TH></TR>\n";
        while ($a = mysql_fetch_array($result)) {
          echo "<TR><TD>$a[name]</TD>", "<TD>$a[descr]</TD></TR>";
        }
        echo "</TABLE>";
     } else {
        echo "<P>Rien à voir.";
     }
  ?> 
Comme en perl, les types sont dynamiques (pas d'obligation de déclaration, conversion automatique): <? echo 5 + "1.5" + "10e2"; ?>

Orienté objet:

Définition de classes:
  <?class Cart {
      var $items;                          // attribut
      function add_item($artnr, $num) {    // méthode
         $this->items[$artnr] += $num;
      }  
    }
  ?> 
Héritage et constructeurs:
  <?class NamedCart extends Cart {        // héritage
      var $owner;                        // attribut supplémentaire 
      function NamedCart($name) {        // constructeur
        $this->owner = $name;
      }
    }
 ?> 
Utilisation:
    <? $cart = new NamedCart("PenguinGear"); //instanciation
       $cart->add_item(170923, 2);?>         // utilisation méthode

De nombreuses API natives sont fournies:

Par exemple pour passer d'un moteur de SGBD à un autre, une seule ligne de ce code est à modifier si ces moteurs parlent ODBC
  <?php 
     require_once 'DB.php'; 
     $db = DB::connect('odbc://user:pw@host/mydb');     //ligne à modifier 
     $stmt = $db->prepare('SELECT * FROM comments'); 
     $result = $db->execute($stmt); 
     while($row = $db->fetchrow($result)) { 
        while($row as $field => $value ) { 
          echo "$field: $value<br>\n"; 
        } 
     } 
     $db->disconnect(); 
 ?> 
la gestion de session
?php
   if (!session_is_registered('count')) {
      session_register('count');
      $count = 1;
   }
   else {
      $count++;
   }
?>
Bonjour, vous avez visité cette page <?php echo $count; ?> fois.<p>;

Les extensions foisonnent:

Exemple: La librairie de génération d'images et graphiques de Tom Boutell pour lire et créer des formats (GIF, JPEG, PNG, WBMP) :
  <?
     Header("Content-type: image/png");
     $im = ImageCreate(630,80);
     $blue = ImageColorAllocate($im,0x5B,0x69,0xA6);
     $white = ImageColorAllocate($im,255,255,255);
     $black = ImageColorAllocate($im,0,0,0);
     ImageTTFText($im, 60, 0, 10, 55, $black, "CANDY.TTF", $text);
     ImageTTFText($im, 60, 0, 6, 52, $white, "CANDY.TTF", $text);
     ImagePNG($im);
  ?>         
Le traitement de fichier XML via sablotron:
  <?
     $p = xslt_create();
     $res = xslt_process($p,'freshmeat.xml','freshmeat.xsl');
     if(!$res) echo xslt_error($p);
     echo $res;
     xslt_free($p);
  ?> 
Des graphes avec IMLIB:
  <? 
     require 'Graph.imlib.class';
     $graph = new Graph;
     $graph->InitGraph(600,400);
     $name[0]  = "Flip Flops";
     $data[0]  = rand(40,500);
     $name[1]  = "BBOPS";
     $data[1]  = rand(40,300);
     $name[2]  = "BSOPS";
     $data[2]  = rand(40,300);
     $name[3]  = "MFLOPS";
     $data[3]  = rand(40,300);
     $name[4]  = "Secret OPS";
     $data[4]  = rand(40,300);
     $name[5]  = "Laptops";
     $data[5]  = rand(40,300);
     $total = array_sum($data);
     $strTitle = "A random set of data ($total)";
     $graph->PieChart($name,$data,$strTitle);
     $graph->ShowGraph();
   ?> 


Figure 10.1: Les camemberts en php


Tout est gratuit ou presque:

pour en savoir plus:
    La page officiel                   http://www.php.net
    Des transparents de présentation:  http://conf.php.net
    Un manuel:                         http://www.php.net/manual/
    Un tutorial                        http://www.php.net/tut.php
    Des livres( la j'abuse):           http://www.php.net/books.php

Previous Up Next