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 :
-
SGML style: <? code ?>
- XML style: <?php code ?>
- ASP style: <% code %> ou <%= code évalué ?>
- Javascript style: <script language="php"> code </script>
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