Professional Documents
Culture Documents
Julien Gaulmin
julien.gaulmin@alcove.fr
version 1.44
Copyright c 2000 Julien Gaulmin julien.gaulmin@alcove.fr, Alcve Ce document peut tre reproduit, distribu et/ou modi selon les termes de la Licence GNU de Documentation Libre (GNU Free Documentation Licence) dans sa version 1.1 ou ultrieure telle que publie, en anglais, par la Free Software Foundation ; sans partie invariante, avec comme premire de couverture (front cover texts) les deux premires pages, et sans partie considre comme quatrime de couverture (back cover texts) Une copie de la licence est fournie en annexe et peut tre consulte lurl : http ://www.gnu.org/copyleft/fdl.html
Alcve
Centre Paris Pleyel 153 bd Anatole France 93200 Saint-Denis, France Tl. : +33 1 49 22 68 00 Fax : +33 1 49 22 68 01 E-mail : alcove@alcove.fr, Toile : www.alcove.fr
1
4.1 Interoprabilit avec des applicatifs 4.2 Traitement des chanes de caractres 4.3 Fonctionnalits utiles 4.4 Conclusion
Chapitre 1
Alcve - Programmer en PHP
Introduction au langage
Introduction au langage
Alcve - Programmer en PHP
Section 1
Alcve - Programmer en PHP
La programmation web
La programmation web
Alcve - Programmer en PHP
Objectifs de la section Rappels dHTML ; Le web interactif ; Notions de CGI ; Distinction PHP/CGI.
La programmation web
Alcve - Programmer en PHP
Rappels dHTML H yper T ext M arkup L anguage ; Dnit la structure logique dun document web ; Compos dun ensemble de commandes de formatage ; Bas sur la notion d environnement possdant un dbut et une n -> dlimiteurs : tags ou marqueurs.
La programmation web
Alcve - Programmer en PHP
Les marqueurs sont dnis entre <> ; Ex : <marqueur>...</marqueur> La plupart des environnements peuvent tre imbriqus selon des rgles bien dnies ; Ex : <H1><B>Mon titre</B></H1> Il nest pas permis de faire chevaucher des environnements. Ex : <H1><B>Mon titre</H1></B>
La programmation web
Alcve - Programmer en PHP
Structure gnrale dune page HTML : <HTML> <HEAD> <TITLE>Mon titre</TITLE> < !-- Mes commentaires --> </HEAD> <BODY> <H1>Mon chapitre</H1> <P>Mon paragraphe</P> <ADDRESS>Mes coordonnes</ADDRESS> </BODY> </HTML>
10
La programmation web
Alcve - Programmer en PHP
Le web interactif Deux principaux types dinteractions : ct serveur ( Server-side scripting ), ct client ( Client-side scripting ). Chacun des types prcdents se divise encore en sous-catgories.
11
La programmation web
Alcve - Programmer en PHP
Ct client : scripts embarqus dans la page HTML ( HTML-embedded scripting ) -> Javascript..., applets -> Java, ActiveX..., plugins propritaires.
12
La programmation web
Alcve - Programmer en PHP
Ct serveur : CGI -> Perl, C, Shell..., Interprteurs intgrs au serveur HTTP scripts embarqus dans la page HTML ( HTTPD modules , HTML-embedded scripting ) -> PHP , ASP-VBScript..., scripts la CGI ( CGI-like ) -> mod_perl/Apache Servlets -> Java.
13
La programmation web
Alcve - Programmer en PHP
WWW interactif
Client-side scripting
Applets (Java, ActiveX) HTTPD modules HTML-embedded scripting (PHP, ASP-VBS) CGI-like (mod_perl /Apache) HTML-embedded scripting (JavaScript)
14
La programmation web
Alcve - Programmer en PHP
Notions de CGI C ommon G ateway I nterface ; Interface de communication pour la cration de programmes capables dtre excuts par un serveur HTTP ; Permet la cration dynamique de pages du ct serveur ; Gnralement utilis pour servir les requtes en provenance dune page de formulaire HTML.
15
La programmation web
Alcve - Programmer en PHP
Principe de la CGI :
GET/POST "emballage"
RPONSE
HTTP
Serveur HTTP
CGI
16
La programmation web
Alcve - Programmer en PHP
if ($want_page==1){ $want_page=0 ; } Scnario de gnration dynamique de page via la CGI : lutilisateur remplit un formulaire HTML et le valide, le navigateur ouvre une connexion vers le serveur HTTP et lui envoie la requte correspondante (nom du CGI + paramtres), le serveur HTTP invoque le script CGI en lui transmettant les paramtres de la requte, le script CGI gnre une page correspondant aux paramtres, le serveur envoie la page au navigateur et ferme la connexion, le navigateur afche la page.
17
La programmation web
Alcve - Programmer en PHP
Distinction PHP/CGI Tous les deux sont situs ct serveur mais : PHP : le code PHP est contenu dans les pages HTML Ex : < ?php $username = "toto" ; ?> <HTML><BODY><H1> Bonjour monsieur < ?php print $username ?> </H1></BODY></HTML> CGI : le code HTML est contenu dans le code du CGI Ex : # !/usr/bin/perl -w $username = "toto" ; print "Content-Type : text/html\n\n" ; <HTML><BODY><H1>Bonjour monsieur $username</H1></BODY></HTML>" ;
18
Section 2
Alcve - Programmer en PHP
Prsentation de PHP
19
Prsentation de PHP
Alcve - Programmer en PHP
Objectifs de la section ; Vue densemble du PHP ; Lhistoire du langage ; Ses avantages ; Et ses inconvnients.
20
Prsentation de PHP
Alcve - Programmer en PHP
Vue densemble du PHP A server-side, HTML-embedded scripting language Langage de script ct serveur ; Embarqu dans les pages HTML ; Syntaxe hrite du C et du Perl ; Extensible (nombreuses bibliothques) ; Supporte pratiquement tous les standards du web ; Logiciel Open Source (Licence PHP de type BSD).
21
Prsentation de PHP
Alcve - Programmer en PHP
Lhistoire du langage
Cr par Rasmus Lerdorf en 1994 pour des besoins personnels ( P ersonnal H ome P age) ; Premire version publique en 1995 sous le nom de Personnal Home Page Tools capable de grer un livre dor, un compteur daccs... ;
22
Prsentation de PHP
Alcve - Programmer en PHP
Deuxime version plus complte (PHP/FI) en 1995 avec gestion des formulaires HTML et des bases mSQL ainsi quun nouvel interprteur ; PHP/FI est utilis par environ 50000 sites web en 1997 ;
23
Prsentation de PHP
Alcve - Programmer en PHP
En 1997, le projet devient un travail dquipe et linterprteur est rcrit par Zeev Suraski et Andi Gutmans pour donner la version PHP3 ; La version 3 de PHP sest rapidement impose pour atteindre environ 150000 sites web durant lt 1999 (source : Netcraft) et devenir P HP : H ypertext P reProcessor ;
24
Prsentation de PHP
Alcve - Programmer en PHP
Aujourdhui le projet est chapeaut par Zend, une socit prive cre par Suraskyi et Gutmans, qui commercialise des logiciels complmentaires PHP ; La dernire version en date est la PHP4 (2000). Elle possde un interprteur optimis par Zend et souvre dautres serveurs HTTP quApache.
25
Prsentation de PHP
Alcve - Programmer en PHP
26
Prsentation de PHP
Alcve - Programmer en PHP
Les avantages de PHP Le client na pas accs au code source puisque celui-ci est interprt avant envoi ( != Javascript) ; Le client ne reoit que le rsultat de lexcution du script ; On peut congurer le serveur HTTP pour masquer compltement la qualit dynamique des pages ; Le code nest pas alourdi par des commandes destines gnrer la page HTML ( != CGI) ;
27
Prsentation de PHP
Alcve - Programmer en PHP
Le langage possde de nombreuses bibliothques/modules pour : le calcul mathmatique, la cration dynamique dimages, la gestion de sessions, les connexions scurises (SSL), laccs la plupart des SGBD, laccs aux bases LDAP...
28
Prsentation de PHP
Alcve - Programmer en PHP
Les inconvnients de PHP Pas aussi rapide que mod_perl ou certains CGI mais plus portable ; Pas aussi simple que ASP-VBScript mais plus respectueux des standards web et sous licence Open Source (-> plus facilement extensible) ; Pas dinteractivit au niveau du client (-> on doit quand mme utiliser du Javascript dans ces cas l).
29
Section 3
Alcve - Programmer en PHP
30
Objectifs de la section Installation de PHP ; Conguration via php3.ini/php.ini ; Premier test ; Ajout de nouveaux modules.
31
Installation Trois types dinstallation : module dynamique du serveur HTTP (ex : mod_php pour Apache), module statique du serveur HTTP (20% plus rapide que mod_php) qui ncessite de patcher le serveur HTTP et de tout recompiler, sous forme de CGI (pour les serveurs HTTP non supports).
32
Tlcharger des sources sur http ://fr.php.net (mirroir franais du site ofciel de PHP) ; Installer les sources dans un rpertoire diffrent de celui du serveur HTTP (ex : /usr/local/src/php/) avec la commande tar -zxvf php-<version>.tar.gz -C /usr/local/src/php/ ; Conguration de linstallation : ./setup (conguration interactive), ou ./configure <options> (./configure --help pour connatre toutes les options).
33
Compilation et installation : make ; su ; make install Association des chiers contenant du code PHP avec linterprteur PHP dans la conguration du serveur HTTP Ex : serveur Apache (srm.conf ou httpd.conf) PHP3 -> AddType application/x-httpd-php3 .php PHP4 -> AddType application/x-httpd-php .php Sous Debian, tout ceci est simpli grce lutilitaire apt-get (remplacer php3 par php4 pour PHP4) : apt-get install php3 pour le module dynamique Apache, ou apt-get install php3-cgi pour le CGI.
34
Conguration de PHP (php3.ini/php.ini) Gnralement dans /etc/php<version>/apache/ ou /usr/lib/php<version>/ ; Ce chier (php3.ini pour PHP3 et php.ini pour PHP4) contrle les principaux comportements de PHP ; Trs clair et facilement congurable ; Syntaxe : clef = valeur, clef = "valeur complexe", ; commentaire, boolen -> 1, On, True, Yes / 0, Off, False, No.
35
Segment en parties : options du langage, ressources maximales alloues PHP, gestion des erreurs, gestion des donnes HTTP, chiers et rpertoires, extensions dynamiques (modules), conguration des modules. Pour que PHP prenne les modications en compte il faut relancer le serveur HTTP (ex : serveur Apache -> apachectl restart).
36
Premier test Crer le chier test.php : < ?php phpinfo() ; ?> Placer ce chier la racine du serveur HTTP (ou dans le rpertoire doc_root si vous avez activ loption safe_mode) ; Charger lURL http ://localhost/test.php sur votre navigateur web ; Bravo ! Vous avez cr votre premire page dynamique avec PHP et en plus elle vous rsume toutes les fonctionnalits PHP qui sont congures sur votre machine.
37
Installer un nouveau module PHP Placer le nouveau chier <nom>.so dans extension_dir (par dfaut /usr/lib/php<version>/apache mais congurable dans php3.ini/php.ini) ou utiliser apt-get install php<version>_<nom> sous Debian ; Ajouter la ligne extension=<nom>.so dans php3.ini/php.ini ; Congurer les aspects relatifs au module dans php3.ini/php.ini ; Redmarrer le serveur HTTP.
38
Chapitre 2
Alcve - Programmer en PHP
39
Objectifs du chapitre Syntaxe du langage ; Les structures de contrle ; Fonctions ; Programmation oriente objet.
40
Section 1
Alcve - Programmer en PHP
Syntaxe du langage
41
Syntaxe du langage
Alcve - Programmer en PHP
Objectifs de la section Syntaxe de base ; Les types de donnes ; Les variables ; Les constantes ; Les oprateurs.
42
Syntaxe du langage
Alcve - Programmer en PHP
Syntaxe de base Quatre moyens quivalents pour passer du mode HTML au PHP : standard : < ?php ...mon code PHP... ?>, option short_open_tag : < ? ...mon code PHP... ?>, option asp_tags : <% ...mon code PHP... %>, marqueur script du HTML : <script language="php"> ...mon code PHP... </script>.
43
Syntaxe du langage
Alcve - Programmer en PHP
Bases de la syntaxe hrites du C et du Perl : sparateur dinstructions -> ; commentaires : ...code /* ...mes commentaires... */ code..., ...code... // ...mes commentaires..., ...code... # ...mes commentaires....
44
Syntaxe du langage
Alcve - Programmer en PHP
Les types de donnes PHP supporte les types de donnes suivants : nombres entiers, nombres virgule ottante, chanes de caractres, tableaux, objets (dvelopps dans la section programmation oriente objet). Tous les noms de variables sont prcds dun $ (ex : $toto = 5 ;) ;
45
Syntaxe du langage
Alcve - Programmer en PHP
Il est possible de spcier une variable de type entier de la faon suivante : $toto = 123 ; # est un entier en base 10, $toto = -123 ; # est un entier ngatif, $toto = 0123 ; # est un entier en base 8, $toto = 0x123 ; # est un entier en base 16. Il est possible de spcier une variable de type ottant ou double de la faon suivante : $titi = 1.234 ; # est un nombre virgule ottante, $titi = 1.2e3 ; # est aussi un nombre virgule ottante.
46
Syntaxe du langage
Alcve - Programmer en PHP
Il est possible de spcier une variable de type chane de caratres de la faon suivante : $personne = M. Smith ; # est une chane de caractres, $personne = "M. Smith" ; # est aussi une chane de caractres. Dans le deuxime cas, si la chane contient des noms de variables, celles-ci seront remplaces par leur valeur ; Ex : $type = M. ; $nom = "Smith" ; $personne = "$type $nom" ; Equivalent $personne = M. Smith ;.
47
Syntaxe du langage
Alcve - Programmer en PHP
Quand on utilise les "..." on doit donc chapper certains caractres avec un backslash (\) pour pouvoir les afcher comme tels : dollar ($) : \$, double quotes (") : \", backslash (\) : \\. De mme, il existe des caractres spciaux qui ncessitent dtre chapps : nouvelle ligne : \n, retour la ligne : \r, tabulation : \t. Tout autre caractre chapp gnrera un avertissement ( warning ) ;
48
Syntaxe du langage
Alcve - Programmer en PHP
Lorsquune chane de caractres est value comme une valeur numrique, les rgles suivantes sappliquent : la chane est de type ottant/double si elle contient ., e ou E sinon elle est de type entier , la valeur est dnie par la premire partie de la chane (0 si cest du texte), lorsque la premire expression est une chane, le type de la variable dpend de la seconde expression. Ex : $toto = 1 + "4.5" ; # $toto vaut 5.5 $toto = 1 + "-1e3" ; # $toto vaut -999 $toto = 1 + "titi + 149" ; # $toto vaut 1 $toto = 1 + "149 + titi" ; # $toto vaut 150
49
Syntaxe du langage
Alcve - Programmer en PHP
Les tableaux de PHP ressemblent aux tableaux associatifs ( hash-tables ) du Perl ; Lindex dans le tableau est appell cl et peut tre indiffremment un entier ou une chane de caractres ; La valeur associe une cl est appele valeur ; On peut utiliser la fonction array() pour crer un tableau ; On peut aussi affecter directement les valeurs au tableau ; La fonction list() permet daffecter des variables comme si elles constituaient un tableau ;
50
Syntaxe du langage
Alcve - Programmer en PHP
Ex : $tab[0] = 1 ; $tab[1] = "toto" ; # on peut mlanger les contenus $tab["toto"] = "titi" ; # on peut mlanger les cls $tab["toto"][8] ; # tableau deux dimensions $tab["toto"][8]["encore"][2] ; # quatre dimensions $suite = array(1, 2, 3, 4) ; $personne = array("type" => "M.", "nom" => "Smith") ; list($num1, $num2) = $suite ; # $num1 vaut 1 et $num2 vaut 2
51
Syntaxe du langage
Alcve - Programmer en PHP
On peut connatre le nombre dlments dun tableau grce aux fonctions : sizeof() : retourne le nombre dlments dun tableau, ou count() : retourne le nombre dlments dun tableau sil existe, 1 si la variable nest pas un tableau et 0 si la variable nexiste pas.
52
Syntaxe du langage
Alcve - Programmer en PHP
Chaque tableau entretient un pointeur courant qui sert naviguer en son sein grce aux fonctions : reset() : place le pointeur interne sur le premier lment et retourne sa valeur, current() : retourne la valeur de l lment courant , next() : place le pointeur interne sur l lment suivant et retourne sa valeur, prev() : place le pointeur interne sur l lment prcdent et retourne sa valeur, each() : retourne la paire cl/valeur courante du tableau et avance le pointeur sur llment suivant (cest la seule fonction qui ne retourne pas faux si llment vaut 0 ou "").
53
Syntaxe du langage
Alcve - Programmer en PHP
Un tableau peut tre tri en utilisant les fonctions suivantes : asort()/arsort() : trient le tableau en ordre croissant/dcroissant de valeurs , ksort()/rsort() : trient le tableau en ordre croissant/dcroissant de cls , sort() : trie le tableau en ordre croissant cls et valeurs (on perd la correspondance cl/valeur), uasort()/uksort()/usort() : trient le tableau de la mme faon que leurs quasi-homonymes (u pour user ) mais avec une fonction de comparaison fournie par lutilisateur.
54
Syntaxe du langage
Alcve - Programmer en PHP
Ex : function cmp($a, $b) { if ($a == $b) return 0 ; return ($a > $b) ? -1 : 1 ; } $tab = array(3,2,5,6,1) ; usort($tab, cmp) ; while(list($cle, $valeur) = each($tab)) { echo "tab[$cle] = $valeur<BR>\n" ; } Ce programme est quivalent rsort().
55
Syntaxe du langage
Alcve - Programmer en PHP
Les variables La porte dune variable dpend du contexte dans lequel elle est dnie ; La plupart des variables ont une porte qui stend sur lintgralit du script PHP, elles sont globales ; Cependant, les variables sont locales au sein dune fonction ;
56
Syntaxe du langage
Alcve - Programmer en PHP
Ex : $toto = 1 ; # porte globale function affiche () { echo $toto ; # porte locale } affiche() ; Cet exemple nafchera rien car echo() utilise la variable locale $toto.
57
Syntaxe du langage
Alcve - Programmer en PHP
Deux faons existent pour accder une variable globale au sein dun bloc : dclarer la variable comme global au sein du bloc, utiliser le tableau associatif $GLOBALS avec comme cl le nom de la variable globale.
58
Syntaxe du langage
Alcve - Programmer en PHP
Ex : $toto = 1 ; # porte globale $titi = 2 ; # porte globale function affiche () { global $toto ; # porte globale echo "$toto et $GLOBALS[titi]" ;} affiche() ; Cet exemple afchera 1 et 2.
59
Syntaxe du langage
Alcve - Programmer en PHP
Variables statiques : Une variable statique est une variable locale qui ne perd pas sa valeur chaque fois que le bloc est excut ; On utilise, comme en C, lattribut static pour dclarer une telle variable : Ex : static $toto ; Ce type de variables est trs utile pour la cration de fonctions rcursives ;
60
Syntaxe du langage
Alcve - Programmer en PHP
Ex : compter rcursivement jusqu 10 function compte () { static $compteur = 0 ; $compteur++ ; echo "$compteur " ; if ($compteur < 10) compte() ; } compte() ; Afche 1 2 3 4 5 6 7 8 9 10.
61
Syntaxe du langage
Alcve - Programmer en PHP
Variables dynamiques : Une variable dynamique prend la valeur dune variable et lutilise comme nom dune autre variable ; Ex : $toto = "Hello" ; # $toto vaut Hello $$toto = "World" ; # $Hello vaut World echo "$toto $Hello !" ; # afche Hello World ! echo "$toto ${$toto} !" ; # afche aussi Hello World !
62
Syntaxe du langage
Alcve - Programmer en PHP
Le nom dune variable peut tre plac entre accolades pour viter les ambiguts ; Ex :
63
Syntaxe du langage
Alcve - Programmer en PHP
Variables extrieures : Toutes les variables transmises par les mthodes POST ou GET sont accessibles via les tableaux associatifs $HTTP_POST_VARS et $HTTP_GET_VARS (si loption track_vars est active dans php3.ini/php.ini) ; Les variables denvironnement sont accessibles comme des variables PHP classiques (ex : $HOME) ; On peut aussi utiliser les fonctions getenv() et putenv() pour manipuler les variables denvironnement ;
64
Syntaxe du langage
Alcve - Programmer en PHP
Variables prdnies : Certaines variables sont prdnies par PHP, elles sont disponibles pendant toute lexcution du script.
PHP_SELF GLOBALS HTTP_GET_VARS HTTP_POST_VARS HTTP_COOKIE_VARS URI du script en cours dexcution. Tableau des variables globales. Tableau des variables issues de GET. Tableau des variables issues de POST. Tableau des variables issues des cookies.
65
Syntaxe du langage
Alcve - Programmer en PHP
http ://hoohoo.ncsa.uiuc.edu/cgi/env.html
66
Syntaxe du langage
Alcve - Programmer en PHP
Pour dterminer le type dune variable on peut utiliser les fonctions suivantes : gettype() : retourne une chaine dcrivant le type de la variable passe en argument ( integer , double , string , array , object , unknown type ), is_long()/is_int()/is_integer() : retourne true si la variable passe en argument est un entier et false dans le cas contraire, is_double()/is_float : idem mais avec les ottants/doubles, is_string() : idem mais avec les chanes de caractres, is_array() : idem mais avec les tableaux, is_object() : idem mais avec les objets.
67
Syntaxe du langage
Alcve - Programmer en PHP
Les constantes PHP dnit certaines constantes et propose un mcanisme pour en dnir dautres durant lexcution du script ; On dnit une constante en utilisant la fonction define() ; Ex : define("MA_CONSTANTE", "Bonjour") ; echo MA_CONSTANTE ; # afche Bonjour
68
Syntaxe du langage
Alcve - Programmer en PHP
Les principales constantes dnies par PHP sont les suivantes : __FILE__ : nom du chier actuellement excut, __LINE__ : numro de la ligne qui est actuellement excute, PHP_VERSION : prsentation de la version du PHP utilise (ex : 3.0.8-dev), PHP_OS : systme dexploitation utilis par la machine qui fait tourner le PHP (ex : Linux), TRUE : vrai, FALSE : faux, E_* : gestion des erreurs (cf. section correspondante).
69
Syntaxe du langage
Alcve - Programmer en PHP
Les oprateurs Les oprateurs arithmtiques : addition : $a + $b, soustraction : $a - $b, multiplication : $a * $b, division : $a / $b, modulo (reste de la division entire) : $a % $b.
70
Syntaxe du langage
Alcve - Programmer en PHP
Loprateur sur les chanes de caractres : concatnation : chaine1 . chaine2 Ex : $jour = "Lundi" ; echo Nous sommes . $jour . " !" ; Afche Nous sommes Lundi !
71
Syntaxe du langage
Alcve - Programmer en PHP
Les oprateurs sur les bits : ET bit bit : $a & $b, OU bit bit : $a | $b, OU-Exclusif/XOR bit bit : $a $b, NON bit bit : $a, dcalage droite de $b bits : $a > > $b, dcalage gauche de $b bits : $a < < $b.
72
Syntaxe du langage
Alcve - Programmer en PHP
Les oprateurs logiques : ET (vrai si $a et $b vrais) : $a and $b, $a && $b. OU (vrai si $a ou $b vrai(s)) : $a or $b, $a || $b. OU-Exclusif/XOR (vrai si seul $a ou $b vrai) : $a xor $b, NON (vrai si $a est faux) : !$a.
73
Syntaxe du langage
Alcve - Programmer en PHP
Les oprateurs daffectation : loprateur daffectation le plus simple est le signe =, il ne signie pas "gal " mais que loprande gauche du signe = se voit affect de la valeur de loprande de droite, la valeur retourne par une expression dassignement est la valeur assigne, Ex : $a = ($b = 4) + 3 ; # $a vaut 7 et $b vaut 4
74
Syntaxe du langage
Alcve - Programmer en PHP
il existe en plus des oprateurs combins pour tous les oprateurs arithmtiques, les oprateurs bits bits et loprateur de concatnation,
+= &= -= |= *= = /= < <= %= > >= .= =
ceux-ci permettent dutiliser la valeur dune variable dans une expression et daffecter le rsultat de cette expression cette variable, Ex : $toto += 3 # quivaut $toto = $toto + 3
75
Syntaxe du langage
Alcve - Programmer en PHP
loprateur ++ est quivalent += 1, loprateur -- est quivalent -= 1, ces deux oprateurs peuvent tre placs avant (pr-excution) ou aprs (post-excution) la variable laquelle ils sappliquent. Ex : $toto = 0 ; echo ++$toto ; # afche 1 echo $toto++ ; # afche 1 echo $toto ; # afche 2
76
Syntaxe du langage
Alcve - Programmer en PHP
Les oprateurs de comparaison : gal : $a == $b, diffrent de : $a != $b, suprieur : $a > $b, infrieur : $a < $b, suprieur ou gal : $a >= $b, infrieur ou gal : $a <= $b.
77
Syntaxe du langage
Alcve - Programmer en PHP
Loprateur ternaire : issu du langage C, (condition) ? (expression1) : (expression2) ;, renvoie expression1 si condition est vraie et expression2 dans le cas contraire. Ex : echo $toto == 0 ? "Nul" : "Non nul" ; # afche Nul si $toto vaut 0 et Non nul sinon
78
Section 2
Alcve - Programmer en PHP
79
80
Introduction Tous les scripts PHP sont une suite dinstructions ; Une instruction peut tre : un assignement, un appel de fonction, une instruction conditionnelle, ou une instruction qui ne fait rien (une instruction vide). Une instruction se termine habituellement par un point virgule ( ;) ;
81
Plusieurs instructions peuvent tre regroupes en bloc , dlimit par des accolades ({...}) ; Un bloc est considr comme une instruction ; Les diffrents types dinstructions sont dcrits dans ce chapitre.
82
Instructions conditionnelles Linstruction if est une des plus importantes instructions de tous les langages, PHP inclus ; Elle permet lexcution conditionnelle dune partie de code ; Les fonctionnalits de linstruction if sont les mmes en PHP quen C;
83
Prototype : if (condition) { # instructions excuter si la condition est vraie... } Une chaine de caractre ne contenant que 0 sera value comme fausse ;
84
Souvent on souhaite excuter une instruction si une condition est remplie, et une autre instruction si cette condition nest pas remplie ; Cest le rle du else ; Prototype : if (condition) { # instructions excuter si la condition est vraie... } else { # instructions excuter si la condition est fausse... }
85
elseif permet, comme lexpression else, dexcuter une instruction aprs un if dans le cas o ce dernier est valu comme faux ; A la diffrence de lexpression else, il nexcutera les instructions que si lexpression condionnelle elseif est value comme vraie ;
86
Prototype : if (condition1) { # instructions excuter si la condition1 est vraie... } elseif (condition2) { # instructions excuter si la condition2 est vraie... } elseif (condition3) { # instructions excuter si la condition3 est vraie... ... } else { # instructions excuter si aucune des conditions nest vraie... }
87
La syntaxe du if que nous venons de voir est directement hrite du langage C ; Pas toujours trs adapte pour mlanger code PHP et HTML ; PHP propose donc une autre syntaxe pour le if qui permet damliorer la lisibilit ;
88
Prototype simpli : if (condition1) : # instructions excuter si la condition1 est vraie... elseif (condition2) : # instructions excuter si la condition2 est vraie... elseif (condition3) : # instructions excuter si la condition3 est vraie... ... else : # instructions excuter si aucune des conditions nest vraie... endif ;
89
Ex : if ($type == "Femme") { echo "Bonjour Madame" ; } elseif ($type == "Homme") { echo "Bonjour Monsieur" ; } else { echo "Bonjour, vous tes bizarre !" ; }
90
Boucles La boucle while est le moyen le plus simple dimplmenter une boucle en PHP ; Cette boucle se comporte de la mme manire quen C : les instructions sont excutes tant que lexpression est vraie ; La valeur de lexpression est vrie chaque dbut de boucle ;
91
Si la valeur change durant lexcution de linstruction, lexcution ne sarrtera qu la n de litration ; Comme avec le if, PHP dnit une syntaxe simplie, en plus de celle hrite du langage C ;
92
Prototype : while (condition) { # instructions excuter tant que la condition est vraie... } Prototype simpli : while (condition) : # instructions excuter tant que la condition est vraie... endwhile ;
93
Ex : compter jusqu 10 $i = 1 ; while ($i <= 10) { echo "$i " ; $i++ ; } Afche 1 2 3 4 5 6 7 8 9 10.
94
La boucle do..while ressemble beaucoup la boucle while ; La diffrence est que lexpression est teste la n de chaque itration au lieu du dbut ; La premire itration de la boucle est donc toujours excute ; Il ny a quune syntaxe possible pour les boucles do..while qui est, elle aussi, hrite du langage C ;
95
Prototype : do { # instructions excuter la premire fois et ensuite tant que la condition est vraie... } while (condition) ;
96
Ex : compter jusqu 10 $i = 1 ; do { echo "$i " ; $i++ ; } while ($i <= 10) ; Afche 1 2 3 4 5 6 7 8 9 10.
97
La boucle for est, en PHP tout comme en C, la boucle la plus complexe mais aussi la plus puissante ; Elle fonctionne comme la boucle for du langage C ; Prototype : for (expression1 ; condition ; expression2) { # instructions excuter tant que la condition est vraie... }
98
Lexpression1 est value (excute) quoi quil arrive au dbut de la boucle ; Au dbut de chaque itration, la condition est value ; si elle est vraie, la boucle continue et les instructions sont nouveau excutes, si elle est fausse, lexcution de la boucle sarrte. A la n de chaque itration, lexpression2 est value (excute) ;
99
Les expressions/conditions peuvent ventuellement tre laisses vides (-> attention aux boucles innies) ; Comme avec le if et le while, PHP dnit une syntaxe simplie, en plus de celle hrite du langage C ; Prototype simpli : for (expression1 ; condition ; expression2) : # instructions excuter tant que la condition est vraie... endfor ;
100
Ex : compter jusqu 10 for ($i = 1 ; $i <= 10 ; $i++) { echo "$i " ; } Ex2 : compter jusqu 10 for ($i = 1 ; $i <= 10 ; print "$i ", $i++) ; Ex3 : compter jusqu 10 for ($i = 1 ; $i <= 10 ; print $i++) ; Ces 3 exemples afchent 1 2 3 4 5 6 7 8 9 10.
101
PHP4 dnit une boucle foreach, comme en Perl, pour raliser une boucle sur les lments dun tableau ; En PHP3 on peut raliser lquivalent avec une boucle while et les fonction list() et each() que nous avons vu prcdemment ; Ex : afcher tous les arguments dun formulaire POST while (list($cle, $valeur) = each($HTTP_POST_VARS)) { echo "$cle => $valeur, " ; }
102
Avec linstruction foreach cette boucle devient : foreach ($HTTP_POST_VARS as $cle => $valeur) { echo "$cle => $valeur, " ; } Ou bien, si lon ne veut rcuprer que les valeurs : foreach ($HTTP_POST_VARS as $valeur) { echo "$valeur, " ; }
103
Linstruction break permet de sortir dune boucle nimporte quel moment ; Ex : compter jusqu 10 for ($i = 1, , $i++) { if ($i > 10) break ; echo "$i " ; } Afche 1 2 3 4 5 6 7 8 9 10.
104
Linstruction continue permet dignorer les instructions restantes dans la boucle et de passer directement litration suivante ; Ex : compter 2 par 2 jusqu 10 for ($i = 1, $i <= 10, $i++) { if ($i % 2) continue ; # $i impaire echo "$i " ; } Afche 2 4 6 8 10.
105
Linstruction switch quivaut une serie dinstructions if..elseif..elseif....else ; Elle est utilise pour comparer la mme variable (ou expression) avec un grand nombre de valeurs diffrentes et dexcuter diffrentes parties de code suivant la valeur laquelle elle est gale ;
106
Prototype : switch (expression) { case resultat1 : # instructions excuter si lexpression vaut resultat1... break ; case resultat2 : # instructions excuter si lexpression vaut resultat2... break ; ... default : # instructions excuter en dernier recours... }
107
Linstruction switch excute chacune des clauses dans lordre dcriture ; Elle est excute ligne par ligne ; Aucun code nest excut jusqu ce que le premier case soit vri ;
108
Lorsquil trouve le premier case vri, PHP excute alors les instructions correspondantes et continue jusqu la n du bloc switch ; Pour reproduire le fonctionnement dun if..elseif..elseif....else, il faut terminer tous les cases par des break ; On peut dnir un case excut par dfaut (quivalent au else) grce default ;
109
Ex : switch ($type) { case "Femme" : echo "Bonjour Madame" ; break ; case "Homme" : echo "Bonjour Monsieur" ; break ; default : echo "Bonjour, vous tes bizarre !" ; }
110
Inclusions La fonction require() se substitue elle-mme avec le contenu du chier spci en argument ; La substitution sopre avant linterprtation du code ; Elle ressemble peu prs au #include du C ; Si on lutilise au sein dune boucle, cest le chier tel quil tait la premire itration qui sera rutilis chaque itration (mme sil a chang entre temps) ; De plus, il est dconseill dutiliser require() avec un nom de chier dynamique (contenant une variable) ;
111
La fonction include() inclut et value le chier spci en argument ; Ceci est fait chaque fois que la fonction est rencontre ; On peut donc utiliser cette fonction au sein dune boucle pour inclure un chier diffrent chaque fois par exemple (ex : include("toto_$i") ;).
112
Section 3
Alcve - Programmer en PHP
Fonctions
113
Fonctions
Alcve - Programmer en PHP
Objectifs de la section Prsentation des fonctions PHP ; Les valeurs de retour ; Les arguments.
114
Fonctions
Alcve - Programmer en PHP
Prsentation des fonctions PHP Une fonction peut tre dnie en utilisant la syntaxe suivante : function ma_fonction ($arg_1, $arg_2, ..., $arg_n) { # Corps de ma fonction... return $valeur_de_retour ; } Tout code PHP correct syntaxiquement peut apparatre dans une fonction et dans une dnition de classe ; En PHP3 toute fonction doit tre pralablement dnie avant dtre utilise (idem langage C). Elle peut tre dnie nimporte o en PHP4.
115
Fonctions
Alcve - Programmer en PHP
Les valeurs de retour Les valeurs sont renvoyes en utilisant une instruction de retour optionnelle ; Tous les types de variables peuvent tre renvoys (tableaux et objets compris) ; Ex : function carre($nombre) { return $nombre * $nombre ; } echo carre(3) ; # afche la valeur 9
116
Fonctions
Alcve - Programmer en PHP
On ne peut pas renvoyer plusieurs valeurs en mme temps mais on peut obtenir un rsultat identique en renvoyant un tableau ; Ex : function couleurs() { return array("Coeur", "Pique", "Trfle", "Carreau") ; } list($c1, $c2, $c3, $c4) = couleurs() ;
117
Fonctions
Alcve - Programmer en PHP
PHP4 permet galement le retour de fonction par rfrence ; Ce mcanisme est utile lorsque lon cherche utiliser une fonction pour trouver une variable que lon veux lier ; A la diffrence du passage par rfrence, il faut utiliser un & deux endroits : pour indiquer que lon retourne une rfrence (et non une copie comme lhabitude), mais aussi pour indiquer quune liaison une rfrence et non un simple assignement de variable doit avoir lieu avec la variable de retour.
118
Fonctions
Alcve - Programmer en PHP
Ex : function & trouve_variable ($param) { # ...recherche de la variable $toto... return $toto ; } $titi = & trouve_variable($tata) ; $titi->x = 2 ; Les proprits de lobjet retourn par la fonction trouve_variable() sont lies $titi. Il ne sagit pas dune copie de $toto.
119
Fonctions
Alcve - Programmer en PHP
Les arguments Des informations peuvent tre passes une fonction en utilisant un tableau darguments dont chaque lment est spar par une virgule ; Un lment peut tre une variable ou une constante ; PHP supporte : le passage darguments par valeur (mthode par dfaut), le passage darguments par rfrence, et les valeurs par dfaut des arguments. Une liste darguments dont le nombre est variable ne fonctionne pas en PHP mais un rsultat similaire peut tre obtenu en utilisant un tableau ;
120
Fonctions
Alcve - Programmer en PHP
Passage darguments par valeur : Cest la mthode par dfaut ; Les variables ne sont pas affectes par des changements au sein de la fonction ; On peut donc changer la valeur des arguments au sein de la fonction sans que ceci ait des rpercussions lextrieur de celle-ci ;
121
Fonctions
Alcve - Programmer en PHP
Ex : function ajoute_deux($nombre) { $nombre += 2 ; echo $nombre ; } $toto = 3 ; ajoute_deux($toto) ; # afche 5 echo $toto ; # afche 3
122
Fonctions
Alcve - Programmer en PHP
Passage darguments par rfrence : Les variables sont affectes par des changements au sein de la fonction ; Deux possibilits : de faon permanente en ajoutant un & devant le nom de la variable dans la dnition de la fonction, ou de faon ponctuelle en ajoutant un & devant le nom de la variable lors de lappel la fonction.
123
Fonctions
Alcve - Programmer en PHP
Ex : function retranche_deux( & $nombre) { $nombre -= 2 ; echo $nombre ; } $toto = 3 ; ajoute_deux( & $toto) ; # afche 5 echo $toto ; # afche 5 retranche_deux($toto) ; # afche 3 echo $toto ; # afche 3
124
Fonctions
Alcve - Programmer en PHP
Valeurs par dfaut des arguments : PHP permet, comme en C++, de spcier des valeurs par dfaut pour les arguments de type scalaire ; Il suft de spcier la valeur par dfaut avec un = dans la dclaration de la fonction ; Cette valeur doit tre une constante (pas de variables ni dattributs de classes) et les arguments par dfaut doivent tre les derniers dans la liste ;
125
Fonctions
Alcve - Programmer en PHP
Ex : function annotation($type = "assez bien") { echo "Vous avez $type travaill" ; } annotation("mal") ; # afche Vous avez mal travaill annotation() ; # afche Vous avez assez bien travaill
126
Section 4
Alcve - Programmer en PHP
127
Objectifs de la section Rappels sur la programmation oriente objet ; Les classes en PHP ; Les objets en PHP ; Particularits de PHP.
128
Rappels sur la programmation oriente objet POO -> raisonner en termes de fonctionnalits et de proprits et non en terme de traitements ; L encapsulation : Lobjet reprsente une abstraction dune entit abstraite ou concrte pour laquelle il regroupe en une mme structure les donnes et les traitements ; Un objet possde des caractristiques et des fonctionnalits et on lutilise sans savoir comment elles sont implmentes (ex : un tlphone) ;
129
Les caractristiques/fonctionnalits non utiles pour la manipulation de lobjet mais utiles son fonctionnement sont masques lutilisateur (ex : les composants internes du tlphone) ; L hritage : Un objet peut driver dun autre objet et possder des caractristiques/fonctionnalits supplmentaires tout en hritant des caractristiques/fonctionalits de son aeul (ex : un tlphone sans ls est un tlphone un peu particulier) ;
130
Le polymorphisme : Lorsquon invoque une mthode dun objet, le programme saura retrouver la mthode parmis celles des aeux de lobjet si celle-ci nest pas explicitement dnie pour lui mais quil en a hrit (ex : la mthode "dcrocher le tlphone" pour un sans ls) ;
131
A la cration ( instanciation ) de lobjet, une mthode (qui porte gnralement le mme nom que la classe) est appelle automatiquement : cest le constructeur ; Parfois, la destruction de lobjet, une mthode (qui porte gnralement le mme nom que la classe prcd dun ) est appelle automatiquement : cest le destructeur ;
132
Une classe est une collection de variables ( attributs ) et de fonctions ( mthodes ) qui sappliquent ces variables ; Un objet est une instance dune classe. Son type de donnes est la classe dobjets laquelle il appartient (un peu comme $toto = 123 ; est une instance du type entier ).
133
Les classes en PHP En PHP, on dnit une classe dobjets de la faon suivante : class MaClasse { # Attributs var $monAttribut ; # Mthodes function maMethode($argument) { # ...traitement de $monAttribut avec $argument... } }
134
Les objets en PHP Il est possible de spcier une variable objet de la faon suivante : $monObjet = new MaClasse ; On accde un attribut ou une mthode de la faon suivante : $monObjet->monAttribut = "toto" ; $monObjet->maMethode(23) ;
135
Particularits de PHP Tous les attributs et mthodes sont publics ; Les objets sont librs automatiquement quand ils ne sont plus utiliss ( Garbage Collector ) ; Pas de destructeur.
136
Ex : le Caddie class Caddie { var $elements ; # lments de notre Caddie # Constructeur qui ajoute un cadeau chaque nouveau Caddie function Caddie() { $this->ajoute(1, "cadeau") ; } # Ajout de $nombre articles de type $type au Caddie function ajoute($nombre, $type) { $this->elements[$type] += $nombre ; }
137
# Retrait de $nombre articles de type $type au Caddie function enleve($nombre, $type) { if ($this->elements[$type] > $nombre) { $this->elements[$type] -= $nombre ; return true ; } else { return false ; } } }
138
Chapitre 3
Alcve - Programmer en PHP
Fonctionnalits essentielles
139
Fonctionnalits essentielles
Alcve - Programmer en PHP
Objectifs du chapitre Gestion des connexions et des utilisateurs ; Gestion des sessions ; Autres fonctionnalits essentielles.
140
Section 1
Alcve - Programmer en PHP
Connexions et utilisateurs
141
Connexions et utilisateurs
Alcve - Programmer en PHP
142
Connexions et utilisateurs
Alcve - Programmer en PHP
Gestion des utilisateurs - authentication Les fonctions dauthentication HTTP ne sont disponibles que si PHP est excut comme module Apache (et non pas comme CGI) ; On utilise la fonction header() pour demander une authentication (Authentication Required) au client, gnrant ainsi lapparition dune fentre de demande de nom dutilisateur et de mot de passe ;
143
Connexions et utilisateurs
Alcve - Programmer en PHP
Une fois que les champs ont t remplis, lURL sera de nouveau appele mais avec les variables suivantes mises jour : $PHP_AUTH_USER : utilisateur, $PHP_AUTH_PW : mot de passe, et $PHP_AUTH_TYPE : type dauthentication. Actuellement, seule lauthentication basique (Basic) est supporte ;
144
Connexions et utilisateurs
Alcve - Programmer en PHP
Ex : page dauthentication < ?php if( !isset($PHP_AUTH_USER)) { Header("WWW-Authenticate : Basic realm=Titre") ; Header("HTTP/1.0 401 Unauthorized") ; echo "Texte envoyer au client en cas dannulation" ; exit ; } else { echo "Bonjour $PHP_AUTH_USER.<br>" ; echo "Votre mot de passe est $PHP_AUTH_PW." ; } ?>
145
Connexions et utilisateurs
Alcve - Programmer en PHP
Gestion des connexions Le statut des connexions est conserv en interne par PHP ; Il y a trois tats possibles : 0 / NORMAL : le script PHP travaille, 1 / ABORTED : le client distant sest dconnect, 2 / TIMEOUT : la dure maximale dexcution est dpasse.
146
Connexions et utilisateurs
Alcve - Programmer en PHP
Par dfaut, le script PHP se termine ds que le client se dconnecte mais on peut changer cette politique de diffrentes faons : continuer le script comme si le client tait encore l en activant loption : ignore_user_abort dans php3.ini/php.ini, ou [php3_ignore_user_abort/ignore_user_abort dans apache.conf. excuter une fonction de fermeture pralablement enregistre grce la fonction register_shutdown_function().
147
Connexions et utilisateurs
Alcve - Programmer en PHP
La fonction enregistre avec register_shutdown_function() sera aussi appele la n du script quand celui-ci se termine normalement ; Pour pouvoir avoir un comportement diffrent suivant ltat du script lors de sa nalisation on peut tester ltat dconnect du script avec la fonction connection_aborted() ; La fonction connection_status() permet galement de retourner ltat du script (0, 1, 2 ou 3) ;
148
Connexions et utilisateurs
Alcve - Programmer en PHP
On peut modier le dlai de timeout (30 secondes par dfaut) de plusieurs manires : fonction set_time_limit(), max_execution_time dans php3.ini/php.ini, ou php3_max_execution_time/max_execution_time dans apache.conf. La fonction enregistre avec register_shutdown_function() sera galement appele lorsquun timeout intervient ; On peut tester ltat timeout du script avec la fonction connection_timeout() ;
149
Section 2
Alcve - Programmer en PHP
150
151
Principe La gestion des sessions avec PHP est un moyen de sauver des informations entre deux accs (requtes HTTP) ; Cela permet notamment de construire des applications personnalises, et daccrotre les fonctionnalits de votre site ; Malheureusement, la gestion des sessions ntait pas inclue dans les fonctionnalits standards de PHP jusqu la version PHP4 ; Une bibliothque complmentaire a donc t dveloppe pour grer les sessions avec PHP3, cest PHPlib ;
152
Sessions avec PHPlib PHPlib est une bibliothque PHP libre qui vise faciliter la cration de sites avec PHP ; Elle est toujours utilisable avec PHP4 et prsente dailleurs des fonctionnalits que ce dernier ne possde toujours pas en natif ; Elle se compose de classes et de fonctions qui permettent : le suivi des sessions, lutilisation de variables persistantes au niveau utilisateur et au niveau session, lauthentication et la gestion des permissions, la gnration rapide de code HTML...
153
Installation : rcuprer larchive (http ://phplib.netuse.de), la dcompresser dans un rpertoire quelconque (ex : /usr/lib/phplib/), diter le chier php3.ini/php.ini et xer les options de la faon suivante : magic_quotes_gpc = Off magic_quotes_runtime = Off magic_quotes_sybase = Off track_vars = On auto_prepend_file = <rpertoire contenant prepend.php> include_path = <rpertoire dinstallation>
154
Pour lutilisation de PHPlib, il faut crer quelques chiers en plus des scripts PHP : prepend.php sert dnir toutes les librairies PHPlib inclure avant chaque chier, et local.inc sert dnir les classes qui vont tre utilises par les scripts.
155
Pour grer les sessions et les variables persistantes, la librairie se sert dune base de donnes, dun annuaire LDAP ou encore dun simple chier ; Cette base de donnes et les diffrentes tables qui sont utilises par les scripts utilisant PHPlib doivent tre cres par vos soins grce aux chiers de congurations fournis (gnralement dans /usr/lib/phplib/stuff/) ; Ex : base de donnes MySQL mysql -h <ma_machine_hote> <ma_base> <create_database.mysql
156
Pour grer une session, PHPlib utilise un identiant qui est transmis de script en script au cours de la navigation ; Pour les sessions sans reprise, cet identiant peut tre transmis dans lURL ; Pour grer les reprises de sessions, PHPlib peut stocker lidentiant dans un cookie quil transmet au client la n de chaque script (fonction page_close()) ;
157
PHPlib dnit des classes pour accder aux bases de donnes et grer les sessions ; Vous devez dnir vos propres classes qui drivent des classes gnriques de PHPlib ; Ces classes sont gnralement stockes dans le chier local.inc ;
158
Toutes les pages grant la session doivent tre encadres par : page_open(array("sess" => "MaSession")), et page_close() ; Si on ne souhaite pas utiliser loption auto_prepend_file pour inclure le chier prepend.php, on peut commencer le script par un include() de ce chier ; Pour rendre une variable persistante, on utilise la mthode register() de la classe MaSession ;
159
Ex : session.php < ?php page_open(array("sess" => "MaSession")) ; if( !isset($toto)) $toto = 1 ; print ++$toto ; $sess->register("toto") ; page_close() ; ?>
160
Ex (suite) : local.php < ?php class MaBaseSql extends DB_Sql { var $Host = "ma_machine_hote" ; var $Database = "ma_base" ; var $User = "mon_utilisateur" ; var $Password = "mon_password" ; } class MonContainerSql extends CT_Sql { var $database_class = "MaBaseSql" ; var $database_table = "ma_table" ; }
161
class MaSession extends Session { var $classname = "MaSession" ; var $mode = "cookie" ; var $lifetime = 6000 ; var $that_class = "MonContainerSql" ; } ?>
162
Ex (n) : prepend.php < ?php if ( !is_array($_PHPLIB)) $_PHPLIB["libdir"] = "" ; require($_PHPLIB["libdir"] . "db_mysql.inc") ; require($_PHPLIB["libdir"] . "ct_sql.inc") ; require($_PHPLIB["libdir"] . "session.inc") ; require($_PHPLIB["libdir"] . "local.inc") ; require($_PHPLIB["libdir"] . "page.inc") ; ?>
163
Sessions avec PHP4 Le principe est le mme quavec PHPlib : on attribue un nouvel utilisateur un identicateur de session (SID) ; Ce numro est transmis soit sous forme de cookie soit dans les URLs ; Quand un visiteur accde la page, PHP4 vrie si un identicateur de session a t transmis avec la requte ;
164
Cette vrication peut tre faite de trois manires diffrentes : automatiquement si loption session.auto_start est active dans php.ini, explicitement par lappel de la fonction session_start(), ou implicitement par lappel de la fonction session_register(). Dans le cas o le numro de session est valide, tout lenvironnement de celle-ci est restaur ;
165
Loption register_globals de php.ini autorise les variables globales tre sauvegardes dans une session ; Ex : < ?php session_register("toto") ; $toto++ ; ?> Loption track_vars de php.ini (qui est bloque 1 pour les versions de PHP4 suprieures la 4.0.3) autorise les variables de $HTTP_SESSION_VARS tre sauvegardes dans une session ; Ex : < ?php session_register("toto") ; $HTTP_SESSION_VARS["toto"]++ ; ?>
166
Il existe deux manires pour transmettre le numro de session au sein de lURL : manuellement grce la constante SID qui est une chane de caractres de la forme session_name=session_id (ou vide), automatiquement si PHP4 a t compil avec loption --enable-trans-sid.
167
Ex : compteur de visites < ?php session_register("compteur") ; $compteur++ ; ?> Vous avez vu cette page < ? echo $compteur ; ?> fois. < !-- < ?=SID ?> sert conserver le numro de session au cas o les cookies sont desactivs --> Pour continuer cliquez <A href="compteur.php ?< ?=SID ?>">ici</A>
168
Les fonctions les plus utilises sont : session_start() : cre ou restaure une session, session_destroy() : dtruit une session, session_register()/session_unregister() : sauvegarde/oublie une variable, session_set_save_handler() : permet de dnir ses propres fonctions de sauvegarde de sessions (pour stocker les donnes dans une base de donnes par exemple).
169
Section 3
Alcve - Programmer en PHP
Autres fonctionnalits
170
Autres fonctionnalits
Alcve - Programmer en PHP
171
Autres fonctionnalits
Alcve - Programmer en PHP
Rcupration et traitement des erreurs Il existe 4 types derreurs et dalertes PHP : E_ERROR (1) : erreur dexcution E_WARNING (2) : alerte E_PARSE (4) : erreur danalyse E_NOTICE (8) : notes (alertes qui peuvent tre ignores) Pour dnir un niveau derreur, on ajoute les chiffres des erreurs que lon souhaite prendre en compte (bitmask par dfaut 7 = 4 + 2 + 1) ;
172
Autres fonctionnalits
Alcve - Programmer en PHP
Ce niveau peut tre chang de trois manires : directive error_reporting dans php3.ini/php.ini, directive php3_error_reporting/error_reporting/error_reporting dans httpd.conf, fonction error_reporting().
173
Autres fonctionnalits
Alcve - Programmer en PHP
Toutes les expressions PHP peuvent tre appeles avec le prxe @ qui permet dignorer le rapport derreur pour cette fonction particulire ; Si une erreur survient dans une telle expression, et que loption track_errors est active dans php3.ini/php.ini, on retrouve le message derreur dans la variable globale $php_errormsg ; La fonction error_reporting() tablit le niveau derreur prendre en compte et renvoie lancien niveau ;
174
Autres fonctionnalits
Alcve - Programmer en PHP
La fonction error_log() envoie un message derreur : dans les logs du serveur, un port TCP, ou un chier. Elle prend comme paramtres : message : message qui doit tre envoy, message_type : type de transmission choisi : 0 : systme standard de log de PHP, 1 : mail, 2 : machine distante (TCP/IP), ou 3 : chier local.
Autres fonctionnalits
Alcve - Programmer en PHP
Les cookies Les cookies sont un mcanisme denregistrement dinformations sur le disque du client mais aussi de relecture de ces informations ; Ce systme permet dauthentier et de suivre les visiteurs ; PHP supporte les cookies de manire transparente ;
176
Autres fonctionnalits
Alcve - Programmer en PHP
Pour envoyer un cookie, on utilise la commande setcookie() ; Les Cookies font partie de lentte HTTP, ce qui impose que setcookie() soit appele avant tout afchage sur le client (idem header()) ; Avec PHP4, on peut contourner cette limitation en bufferisant la sortie standard grce la fonction ob_start() puis en librant celle-ci grce la fonction ob_end_flush ; On peut aussi indiquer PHP4 de bufferiser automatiquement la sortie grce loption output_buffering de php.ini mais ceci ralentit sensiblement PHP4 ;
177
Autres fonctionnalits
Alcve - Programmer en PHP
Tous les cookies qui sont envoys au client sont automatiquement retourns au script PHP et placs dans le tableau associatif $HTTP_COOKIE_VARS ; Seuls les cookies qui correspondent au nom de domaine de la page demande sont envoys au serveur par le navigateur ; Pour affecter plusieurs valeurs un seul cookie il faut ajouter [] au nom du cookie ;
178
Autres fonctionnalits
Alcve - Programmer en PHP
Ex : cookie_ecriture.php < ?php setcookie("MonCookie", "Contenu", time() + 3600) ; ?> <HTML><BODY><H1> Maintenant, vous lavez !<br> Allez sur la page <a href = "cookie_lecture.php">prcdente</a>. </H1></BODY></HTML>
179
Autres fonctionnalits
Alcve - Programmer en PHP
Ex (suite) : cookie_lecture.php <HTML><BODY><H1> < ?php if (isset($HTTP_COOKIE_VARS["MonCookie"])) : ?> Le cookie MonCookie contient : < ?php print $HTTP_COOKIE_VARS["MonCookie"] ; else : ?> Vous navez pas le cookie MonCookie.<br> Allez le chercher <a href = "cookie_ecriture.php">ici</a>. < ?php endif ; ?> </H1></BODY></HTML>
180
Chapitre 4
Alcve - Programmer en PHP
Utilisation avance
181
Utilisation avance
Alcve - Programmer en PHP
Objectifs du chapitre Interoprabilit avec des applicatifs ; Traitement des chanes de caractres ; Fonctionnalits utiles.
182
Section 1
Alcve - Programmer en PHP
183
Objectifs de la section Utilisation des SGBDs ; Interfaage avec lAPI Apache ; Utilisation de LDAP.
184
Utilisation des SGBDs Un grand nombre de S ystmes de G estion de B ases de D onnes ( SGBD ) sont supports par PHP ; La plupart sont accessibles via le langage SQL ( S tructured Q uery L angage) ; Celui-ci permet, comme son nom lindique, de raliser des requtes sur les bases de donnes et ceci de faon structure et standardise ; Lutilisation des bases des donnes est la cl de vote des sites dynamiques et de commerce lectronique ;
185
Autres SGBD supports : dBase, lePro (lecture seule), dbm (ndbm, gdbm, Berkeley db).
186
Principales commandes SQL : CREATE TABLE : cre une nouvelle table, DELETE : supprime des lignes dune table, INSERT : insre une nouvelle ligne dans une table, SELECT : rcupre des lignes dune table ou dune vue, UPDATE : modie des valeurs dans des champs.
187
Ex : cration et alimentation dune table CREATE TABLE Personne (Secu INT8 NOT NULL PRIMARY KEY, Nom VARCHAR(20) NOT NULL, Prenom VARCHAR(20) NOT NULL) INSERT INTO Personne VALUES (132456789, Smith, John) INSERT INTO Personne VALUES (987654321, Gates, Bill)
188
189
Chaque base SQL possde sa propre API mais les mcanismes de consultation sont globalement les mmes pour toutes : connexion au serveur de bases de donnes (machine, utilisateur, mot de passe), slection de la base utiliser (nom de la base), requte SQL, exploitation de la requte (afchage...), dconnexion. Bien sr avant dutiliser une base de donnes particulire, il faut sassurer que la librairie correspondante est charge dans PHP ;
190
Pour une base de donnes MySQL, il faut ajouter la ligne extension=mysql.so dans le chier php3.ini/php.ini et vrier que le chier mysql.so se trouve bien dans le rpertoire extension_dir ; Les fonctions MySQL les plus couramment utilises sont les suivantes : mysql_connect() : ouvre une connexion un serveur MySQL, mysql_list_*() : retournent la liste des bases, tables ou champs disponibles sur le serveur, mysql_select_db() : selectionne une base de donnes sur le serveur,
191
mysql_query() : envoie une requte SQL sur la base de donnes active sur le serveur et renvoie un identiant de rsultat : mysql_result() : exploite le rsultat, mysql_fetch_*() : exploitent et manipulent le rsultat, mysql_field_*() : permettent de naviguer au sein du rsultat. mysql_close() : ferme la connexion au serveur MySQL (fait par dfaut la n du script).
192
Il est possible de raliser une connection persistante un serveur MySQL en utilisant la fonction mysql_pconnect() ; Une telle connexion ne sera pas ferme automatiquement la n du script ; Acclre sensiblement les scripts quand les connexions la base sont frquentes ; La connexion sera referme automatiquement aprs un certain temps dinutilisation ;
193
Ex : < ?php mysql_pconnect("db.mon-server.com", "username", "password") ; mysql_select_db("ma_base") ; $resultat = mysql_query("SELECT * FROM ma_table") ; if ($resultat) : ?> <TABLE> <TR><TH>Nom</TH> <TH>Description</TH></TR>
194
< ?php while ($tableau = mysql_fetch_array($resultat)) echo "<TR><TD>", $tableau["nom"], "</TD> <TD>", $tableau["descr"], "</TD></TR>\n" ; ?> </TABLE> < ?php else : echo "Votre table est vide" ; endif ; ?>
195
Il existe des outils dadministration de bases de donnes entirement crits en PHP ; PHPMyAdmin pour les bases MySQL (http ://www.phpwizard.net/phpMyAdmin/), PHPPgAdmin pour les bases PostgreSQL (http ://www.phpwizard.net/phpPgAdmin/). Ces outils sont trs utiles pour crer les bases de donnes avant de les utiliser dans des scripts PHP ; Ils sont galement pratique pour maintenir les bases ; Ces outils tant libres, leur code source peut servir de rfrence pour accder aux bases de donnes avec PHP ;
196
Interfaage avec lAPI Apache La fonction getallheaders() permet de rcuprer tous les en-ttes HTTP correspondant la requte courante ; Les en-ttes sont stocks dans un tableau associatif ; Ex : $headers = getallheaders() ; while (list($header, $valeur) = each($headers)) { echo "$header : $valeur <BR>\n" ; }
197
Utilisation de LDAP L ightweight D irectory A ccess P rotocol ; Protocole normalis daccs aux services dannuaires ; Un annuaire est quivalent une base de donnes o les informations sont ranges de manire hirarchique ; Les caractristiques de LDAP : organisation globale, standard ouvert, extensible et paramtrable, stockages de donnes htrognes, scuris.
198
LDAP utilise une syntaxe nom distincts (dn : distinguished names ) ; Ex : dn et signication dn = "cn=Linus Torvalds, ou=Devel, o=Transmeta, c=USA" country = USA organization = Transmeta organizationUnit = Devel commonName = Linus Torvalds
199
Avant de pouvoir utiliser LDAP avec PHP, il faut ajouter la ligne extension = ldap.so dans php3.ini/php.ini et vrier que la librairie ldap.so se trouve bien dans le rpertoire extension_dir ; Une squence type de consultation/modication dune base LDAP avec PHP prendra la forme suivante : ldap_connect() : tablit une connexion avec un serveur LDAP, ldap_bind() : liaison et authentication sur le serveur, ldap_get_*()/ldap_add()/ldap_modify()... : consultation/modication de la base, ldap_close() : dconnexion.
200
Ex : recherche de tous les dn commanant par l < ?php $ds = ldap_connect("ldap.mon-serveur.com") ; if ($ds) { ldap_bind($ds) ; $sr = ldap_search($ds, "ou=Devel, o=Transmeta, c=USA", "dn=l*") ; $info = ldap_get_entries($ds, $sr) ;
201
for ($i=0 ; $i < $info["count"] ; $i++) { echo "dn vaut : " . $info[$i]["dn"] . "<br>" ; echo "premire entre cn vaut : " . $info[$i]["cn"][0] . "<br>" ; echo "premire email vaut : " . $info[$i]["mail"][0] . "<br>" ; } ldap_close($ds) ; } else { echo "<H4>Impossible de se connecter au serveur LDAP</H4>" ; } ?>
202
Section 2
Alcve - Programmer en PHP
203
204
Manipulation des chanes de caractres Afchage : echo() : afche une ou plusieurs chanes spares par des virgules, print() : afche une chane, printf() : afche une chane selon une chane de formatage (idem langage C). Ex : $nom = "toto" ; echo "Bonjour", $nom ; # afche Bonjour toto print "Bonjour $nom" ; # afche Bonjour toto printf("Bonjour %s", $nom) ; # afche Bonjour toto
205
Substitutions : addslashes() : ajoute un backslash devant tous les caractres spciaux, stripslashes() : enlve les backslashs ajouts par la fonction addslashes, str_replace() : remplace toutes les occurrences dune chane par une autre, Ex : print addslashes(\ \ ") ; # afche \ \ \" print str_replace("toto", "titi", "Bonjour toto !") ; # afche Bonjour titi !
206
Dcoupage : explode() : scinde une chane en morceaux grce un dlimiteur, implode()/join() : regroupe tous les lments dun tableau dans une chane en ajoutant une chane de jointure, ltrim()/chop() : enlve les espaces de dbut/n de chane. Ex : $composants = "resistance, condensateur, transistor " ; $composants = chop($composants) ; $tableau = explode(", ", $composants) ; print $tableau[2] . "." ; # afche transistor.
207
Web : rawurlencode()/rawurldecode() : encode/dcode une chane en URL selon la RFC1738, htmlspecialchars()/htmlentities() : converti tous les caractres spciaux en quivalent HTML. Ex : $url = rawurlencode(bonjour@toi /toto/) ; print $url ; # afche bonjour%40toi%20%2Ftoto%2F $html = htmlentities("2 < 3") ; print $html ; # afche 2 < 3 mais le source HTML contient 2 < 3
208
Comparaison : parse_str() : analyse une chane et en dduit des variables et leur valeur, strcmp() : comparaison sensible la casse, strlen() : retourne la longueur de la chane. Ex : parse_str("toto=23& tab[]=Ceci+fonctionne & tab[]=aussi") ; print "$toto, $tab[0], $tab[1]" ; Afche 23, Ceci fonctionne , aussi
209
Casse : strtolower()/strtoupper() : met tous les caractres en minuscule/majuscule, ucfirst() : force le premier caractre dune chane en majuscule, ucwords() : force le premier caractre de chaque mot dune chane en majuscule. Ex : $nom = "BiLL GaTeZ" ; print $nom = strtolower($nom) ; # afche bill gatez print strtolower($nom) ; # afche Bill Gatez
210
Expressions rgulires Les expressions rgulires (abrv : regex ) sont utilises pour faire des manipulations complexes sur les chanes de caractres (ex : substitutions ou recherches complexes) ; PHP gre deux types dexpressions rgulires : les expressions rgulires avances de POSIX, et les expressions rgulires modies du langage Perl.
211
Principes de base des expressions rgulires : recherche de squences de caractres au sein dune chane, besoin dexpressions pour dcrire ces squences, utilisation dune syntaxe puissante, quivaut la dnition de conditions de recherche.
212
Signication des principales expressions rgulires : c : caractre c (sauf caractres spciaux), \c : caractre spcial c (sauf chiffres de 1 9), : dbut de la ligne, $ : n de la ligne, . : nimporte quel caractre, [s] : caractre appartenant lensemble s, o s est une suite de caractres et/ou une chelle de caractres ([c-c]),
213
[s] : caractre nappartenant pas lensemble s, r* : 0, 1 ou plusieurs occurrences successives de lexpression rgulire r, rx : r, suivie de lexpression rgulire x (concatnation), r{m,n} : un nombre (entre m et n) doccurrences successives de r, r{m} : exactement m occurrences successives de r, r{m,} : au moins m occurrences successives de lexpression rgulire r.
214
Utilisation avec PHP : ereg()/eregi() : expression rgulire standard sensible/insensible la casse, ereg_replace()/eregi_replace() : expression rgulire de substitution sensible/insensible la casse, split() : dcoupe une chane grce un dlimiteur dni par une expression rgulire, sql_regcase() : prpare une expression rgulire insensible la casse (utile pour les fonctions ne supportant pas les recherches insensible la casse).
215
Ex : < ?php $personne = "Nom : Smith, Prnom : John, Age : 52, Divers : blond" ; if (ereg("blond", $personne)) print "Cette personne est blonde." ; # Afche Cette personne est blonde. if (eregi("age : *([0-9]+)", $personne, $resultat)) print "Cette personne a $resultat[1] ans." ; else print "Cette personne na pas dage." ; # Afche Cette personne a 52 ans.
216
print eregi_replace("(age :) *[0-9]+.*", "\1 68", $personne) ; # Afche Nom : Smith, Prnom : John, Age : 68 print sql_regcase("John Smith") ; # Afche [Jj][Oo][Hh][Nn] [Ss][Mm][Ii][Tt][Hh] ?>
217
Section 3
Alcve - Programmer en PHP
Fonctionnalits utiles
218
Fonctionnalits utiles
Alcve - Programmer en PHP
Objectifs de la section Manipulation et traitement des chiers ; Arguments et gestion des URLs ; Cration dynamique dimages ; Fonctions mathmatiques ; PHP et XML ; Templates avec PHPlib ; Utilisation de PHP comme langage de script.
219
Fonctionnalits utiles
Alcve - Programmer en PHP
Manipulation et traitement des chiers Quel que soit le langage de programmation, la gestion des chiers est toujours importante pour le stockage de donnes ; La gestion des chiers en PHP est issue du langage C mais elle comporte quelques fonctions supplmentaires trs utiles (comme la gestion des chiers distants par exemple) ;
220
Fonctionnalits utiles
Alcve - Programmer en PHP
Les principales fonctions de manipulation de chiers sont les suivantes : fopen() : ouverture dun chier (possibilit de fournir une URL HTTP ou FTP pour les chiers distants), fclose() : fermeture du chier, fpassthru() : lit un chier en entier et lafche, fread()/fgets() : lit n caractres dans le chier, fwrite()/fputs() : crit une chane dans un chier, rewind()/fseek()/ftell() : positionnement au sein du chier.
221
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex : afchage de limage image.png < ?php Header("Content-type : image/png") ; if ( !$fd = fopen("image.png", "rb")) echo "Impossible douvrir le fichier." ; else fpassthru($fd) ; ?>
222
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex2 : chier de log < ?php ... if ( !$fd = fopen("mon_error.log", "a")) echo "Impossible douvrir le fichier." ; else fputs($fd, "Erreur : $errormsg\n") ; # Ecrit le dernier message derreur renvoy dans mon_error.log ... ?>
223
Fonctionnalits utiles
Alcve - Programmer en PHP
Les principales fonctions de gestion de chiers sont les suivantes : file_exists() : test de lexistence dun chier, copy() : copie un chier, rename() : renomme un chier, unlink() : efface dnitivement un chier. Ex : < ?php $fichier = "toto.html" if (file_exists($fichier)) copy($fichier, "/tmp/" . $fichier) ; else echo "Impossible douvrir le fichier." ; ?>
224
Fonctionnalits utiles
Alcve - Programmer en PHP
Les principales fonctions de manipulation des rpertoires sont les suivantes : chdir() : changement de rpertoire courant, opendir() : ouverture dun rpertoire, closedir() : fermeture du rpertoire, readdir() : lit lentre suivante dans le rpertoire, rewinddir() : revient au dbut du rpertoire, mkdir() : cre un nouveau rpertoire, rmdir() : supprime un rpertoire, dir() : instanciation dun objet rpertoire pour une manipulation objet de celui-ci,
225
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex : quivalent de la commande ls < ?php chdir("/tmp") ; $dir = dir(".") ; $dir->rewind() ; while ($fichier = $dir->read()) echo "$fichier<br>" ; $dir->close() ; ?>
226
Fonctionnalits utiles
Alcve - Programmer en PHP
Arguments et gestion des URLs La gestion des URLs est importante pour encoder/dcoder des informations au sein mme de celles-ci ; On peut utiliser lURL pour transmettre des informations (variables...) dun script lautre ; Ce mcanisme peut constituer une mini-gestion de sessions par exemple ;
227
Fonctionnalits utiles
Alcve - Programmer en PHP
Les principales fonctions utilises pour la gestion des URLs sont les suivantes : parse_url : analyse une URL et retourne ses composants sous forme dun tableau associatif, urlencode/urldecode : encode/dcode une chane en remplaant les caractres spciaux par des %xx et les espaces par des + (application/x-www-form-urlencode), base64_encode/base64_decode : encode/dcode une chane en base64 pour permettre certains systmes de manipuler les informations binaires sur 8 bits (ex : corps de mail).
228
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex : transmission dune variable par lURL < ?php $chaine = "Bonjour tout le monde ?" ; ?> <A href="mon-cgi ?chaine=< ?php echo urlencode($chaine) ; ?>">Envoyer</A> Appelle le script CGI mon-cgi avec lURL "mon-cgi ?chaine=Bonjour+tout+le+monde+%3F"
229
Fonctionnalits utiles
Alcve - Programmer en PHP
Cration dynamique dimages PHP nest pas limit la cration de chiers HTML, il peut aussi servir gnrer dynamiquement des images (PNG, JPEG, GIF) ; Ces images peuvent tre mises directement vers le client ou sauvegardes sur le serveur ; Elles sont trs pratiques pour dessiner rapidement des graphiques partir de donnes dynamiques (ex : statistiques du site, rsultats dun sondage...) ;
230
Fonctionnalits utiles
Alcve - Programmer en PHP
Pour gnrer des images, PHP utilise la librairie GD ; Celle-ci se compose dun ensemble de fonctions qui permettent de crer des images dynamiques de qualit avec trs peu de code ; Historiquement, le format GIF est le premier avoir t support mais aujourdhui on lui prefre les formats JPEG et surtout PNG, le format le plus ouvert de tous ; Bien sr avant dutiliser cette librairie il faut au pralable la charger dans PHP en ajoutant la ligne extension=gd.so dans le chier php3.ini/php.ini et en vriant que le chier gd.so se trouve bien dans votre extension_dir ;
231
Fonctionnalits utiles
Alcve - Programmer en PHP
LAPI est trs intuitive : ImageCreate*() : pour crer une image blanche ou partir dune image existante, ImageColor*() : pour dnir une couleur et la transparence, ImageString() : pour crire du texte, Image<forme>() : pour dessiner des formes gomtrique connue (rectangle, arc, ligne, polygone...), ImageFill*() : pour colorier des formes, Image<attribut>() : pour connatre un attribut (largeur, hauteur, taille...) de limage, Image<type>() : pour envoyer une image de type PNG, JPEG ou GIF au navigateur, ImageDestroy() : pour dtruire limage...
232
Fonctionnalits utiles
Alcve - Programmer en PHP
Toutes les fonctions de lAPI manipulent un pointeur sur limage courante ; Ce pointeur est retourn par la fonction ImageCreate*() la cration de limage ; Typiquement, on cre un chier PHP dont le seul but est de retourner une image dynamique ;
233
Fonctionnalits utiles
Alcve - Programmer en PHP
Les arguments pour crer limage sont alors passs dans lURL la manire des formulaires en mode GET par exemple (ex : <IMG src = "bouton.php ?texte=TITRE+BOUTON">) Le chier doit retourner un en-tte correspondant limage retourne (ex : Header("Content-type : image/gif") ;) an que le navigateur puisse correctement lafcher ; On peut aussi crer une fonction qui gnre limage mais cette technique est moins facile utiliser car il faut soccuper de stocker limage puis ventuellement de la dtruire par la suite ;
234
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex : gnration dynamique de boutons, bouton.php < ?php Header("Content-type : image/gif") ; if ( !isset($texte)) $texte = "" ; $image = ImageCreateFromGif("images/bouton.gif") ; $couleur = ImageColorAllocate($image, 255, 255, 255) ; $espace = (ImageSX($image) - 7.5 * strlen($texte)) / 2; ImageString($image , 5, $espace, 9, $texte, $couleur) ; ImageGif($image) ; ImageDestroy($image) ; ?>
235
Fonctionnalits utiles
Alcve - Programmer en PHP
236
Fonctionnalits utiles
Alcve - Programmer en PHP
Fonctions mathmatiques Il existe deux types de fonctions mathmatiques dans PHP : les fonctions standards, qui sappliquent sur des entiers long (double), et les fonctions de prcision o les nombres sont reprsents par des chanes de caractres. La constante M_PI est dnie pour le nombre Pi ;
237
Fonctionnalits utiles
Alcve - Programmer en PHP
Les fonctions standards les plus utilises sont les suivantes : abs() : valeur absolue, number_format() : formate un nombre par groupe de milliers, round()/ceil()/floor() : arrondis, max()/min() : encadrements, pow()/sqrt() : puissances, exp()/log()/log10() : exponentielles et logarithmes,
238
Fonctionnalits utiles
Alcve - Programmer en PHP
cos()/sin()/tan()/acos()/asin()/atan() : trigonomtrie, base_convert()/BinDec()/DecBin()/HexDec()/ DecHex()/OctDec()/DecOct() : changements de bases, rand()/srand()/getrandmax() : nombres pseudo-alatoires (les fonctions mt_* sont meilleures et plus rapides).
239
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex : $x = -12 ; print sqrt(pow($x, 2)) . " = " . abs($x) ; # Afche 12 = 12 print number_format(round(12550.49999999), 3, ",", " ") ; # Afche 12 550,000 print cos(M_PI/4) . " = " . 1/sqrt(2) ; # Afche 0.70710678118655 = 0.70710678118655
240
Fonctionnalits utiles
Alcve - Programmer en PHP
PHP et XML e X tensible M arkup L anguage ; Standard ouvert de description de donnes ; Utilise des marqueurs qui, la diffrence des autres ML, dcrivent les donnes et non pas la manire dont celles-ci doivent tre afches (ex : HTML) ; Lutilisation de XML avec PHP ncessite linstallation de la librairie Expat (http ://www.jclark.com/xml/) et la compilation de PHP avec loption --with-xml ; Depuis la version 1.3.7 dApache, la librairie Expat est directement intgre au serveur web ;
241
Fonctionnalits utiles
Alcve - Programmer en PHP
Le module XML permet de crer un parseur XML appelant des fonctions dnies par lutilisateur et permettant de traiter les donnes incluses dans les tags XML ; Fonctions principales : xml_parser_create() : cre un parseur XML et retourne un descripteur de parseur qui sera utiliser par les autres fonctions, xml_set_element_handler() : modie les options associes un parseur (sensibilit la casse, encodage des caractres...), xml_set_character_data_handler() : dnit les fonctions appeler louverture et la fermeture dun tag XML spcique, xml_parse() : le parseur XML, xml_parser_free() : limination dun parseur XML de la mmoire.
242
Fonctionnalits utiles
Alcve - Programmer en PHP
On ne peut pas directement manipuler un parseur XML lintrieur dun objet PHP ; Il faut pour cela dnir un parseur comme variable dinstance de lobjet et passer lobjet par rfrence la fonction xml_set_object() ; Ex : xml_set_object(parser, & object) ; Par la suite, il faut utiliser les fonctions xml_set_*() avec $this->parser comme identiant de parseur.
243
Fonctionnalits utiles
Alcve - Programmer en PHP
Utilisation des templates PHPlib PHPlib propose une classe Template permettant de sparer le squelette HTML dune page, du traitement des donnes permettant de modier dynamiquement cette page ; Les parties dynamiques de la page sont reprsentes dans le code HTML par des identiants entours daccolades ; Ces identiants seront remplaces par leur valeur calcule par le script PHP ;
244
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex : le template (expl.ihtml) <html><head> <title>{LETITRE}</title> </head > <body> <br>Un exemple de variable :{ICI} </body></html>
245
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex (suite) : code PHP utilisant le template expl.ihtml include("template.inc") $tmpl = new Template("rep-template") ; $tmpl->set_file("main", "expl.ihtml") ; $tmpl->set_var(array( "LETITRE"=>"Exemple de titre", "ICI"=>"Un message")) ; $tpml->parse("out", "main") ; $tmpl->p("out") ;
246
Fonctionnalits utiles
Alcve - Programmer en PHP
Fonctions associes aux templates : template() : retourne un objet Template associ au rpertoire o sont stocks les squelettes HTML, set_file() : associe un chier template une variable qui reprsente celui-ci, set_var() : affecte une valeur un nom de variable du template, Ces deux dernires fonctions peuvent aussi tre appeles avec comme unique argument un tableau contenant des paires clefs/valeurs ;
247
Fonctionnalits utiles
Alcve - Programmer en PHP
parse() : cette fonction substitue la valeur de toutes les variables dnies dans la variable de rfrence puis stocke (ou ajoute) le rsultat dans la variable cible, p() : cette fonction afche la valeur de la variable passe en argument dans le navigateur.
248
Fonctionnalits utiles
Alcve - Programmer en PHP
An de pouvoir traiter des lments rptitifs (tableaux, listes de slection...), on peut dclarer des blocs dans les variables manipules par la classe Template ; La dnition utilise les commentaires HTML ; Ex : <form action = "{PHPSELF}"> <select name = "variable"> < !-- BEGIN monbloc -> <option>{MUL} < !-- END monbloc -> </select> <br><input type="submit"></form>
249
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex (suite) : $tmpl = new Template("rep-template") ; $tmpl->set_file("main", "expl.ihtml") ; $tmpl->set_bloc("main", "monbloc", "toto") ; $tmpl->set_var("PHPSELF", $PHP_SELF) ; for ($i = 1 ; $i < 10 ; $i++) { $tmpl->set_var("MUL", $i) ; $tmpl->parse("toto", "monbloc", true) ; } $tpml->parse("out", "main") ; $tmpl->p("out") ;
250
Fonctionnalits utiles
Alcve - Programmer en PHP
Une fois un bloc dni, on peut le rpter en spciant true comme dernier argument de la fonction parse ; La fonction set_block($parent, $blocname, $name) indique que la variable $parent contient un bloc nomm $blocname. Cette fonction enlve le bloc de $parent et le remplace par une variable $name.
251
Fonctionnalits utiles
Alcve - Programmer en PHP
Utilisation de PHP comme langage de script On peut utiliser toute la puissance et la richesse des fonctions de PHP pour faire des scripts non orients web ; Il faut avoir au pralable compil PHP comme CGI (la cohabitation entre plusieurs formes de PHP est possible sur une mme machine) ; La commande php donne alors accs un shell PHP o chaque commande PHP tape est interprte immdiatement ;
252
Fonctionnalits utiles
Alcve - Programmer en PHP
Bien sr, seules les commandes encadres par les < ?php ... ?> seront interprtes les autres tant afches telles-quelles ; Loption -q permet dviter davoir un en-tte HTTP envoy avant le premier afchage ; Pour raliser des scripts classiques en PHP il suft de faire commencer le chier par la ligne : # !/usr/bin/php<version> -q
253
Fonctionnalits utiles
Alcve - Programmer en PHP
Ex : script dinvite login, login.php # !/usr/bin/php<version> -q Bonjour monsieur < ?php echo $USER, "\n" ?>, vous tes sur la machine < ?php echo $HOSTNAME, "\n" ?> En vriant que les variables $USER et $HOSTNAME sont bien exportes par le shell et en rendant le script login.php excutable (chmod +x login.php) la commande ./login.php afche : Bonjour monsieur nom_login, vous tes sur la machine nom_machine.
254
Section 4
Alcve - Programmer en PHP
Conclusion
255
Conclusion
Alcve - Programmer en PHP
256
Conclusion
Alcve - Programmer en PHP
Conseils de programmation PHP Penser en matire de rutilisabilit du code ; Ne pas lsiner sur les commentaires, ils aideront les autres comprendre votre code (on est rarement seul travailler sur un site web) ; Segmenter le code PHP pour le rendre plus clair : prfrer les fonctions courtes et mono-tches, utiliser des chiers diffrents...
257
Conclusion
Alcve - Programmer en PHP
Essayer de sparer au maximum les aspects graphiques (charte graphique, feuilles de styles...), contenu (gestion des donnes dynamiques...) et mise en forme (afchage des donnes dynamiques...) : utilisation de chiers den-ttes, de barres de navigation et de pieds de pages spars, utilisation de chiers contenant les classes manipules par les scripts...
258
Conclusion
Alcve - Programmer en PHP
Lavenir de PHP De plus en plus utilis sur Internet (plusieurs millions de domaines diffrents) ; PHP4 depuis le dbut de lanne 2000 ; Cette version est nanmoins conteste (ex : FSF) cause de ses nouvelles licences ; Elle apporte cependant plus de rapidit (ex : analyseur Zend) et de nouvelles fonctionnalits natives (ex : gestion des sessions...) ;
259
Conclusion
Alcve - Programmer en PHP
Rfrences Livres : Professional PHP Programming (Wrox), Programmation Web avec PHP (Eyrolles), PHP, prcis & concis (OReilly), Programmation PHP (CampusPress)...
260
Conclusion
Alcve - Programmer en PHP
URLs : Le site ofciel de PHP (http ://www.php.net), Documentation ofcielle en anglais (http ://www.php.net/manual), Traduction franaise de la documentation ofcielle (http ://dev.nexen.net/docs), Le site de Zend (http ://www.zend.com), Dveloppement PHP/MySQL chez Nexen (http ://dev.nexen.net)
261
Conclusion
Alcve - Programmer en PHP
Projets libres autour de PHP (http ://www.phpwizard.net), Articles techniques sur PHP (http ://www.phpbuilder.com/), Le site ofciel de PHPlib (http ://phplib.netuse.de), Site Francophone pour lAide la Programmation en PHP (http ://www.phpfr.org)...
262
Conclusion
Alcve - Programmer en PHP
Glossaire Apache : serveur web (HTTP) le plus utilis sur Internet, Browser : navigateur/butineur de page web, CGI ( Common Gateway Interface ) : interface de communication pour la cration de programmes capables dtre excuts par un serveur HTTP, elle permet la cration dynamique de pages du ct serveur, GET : mthode HTTP de transmission de formulaires via les URLs (donnes encodes dans lURL),
263
Conclusion
Alcve - Programmer en PHP
GIF ( Graphics Interchange Format ) : format brevet dimages compresss, trs utilis sur le web, HTML ( Hyper Text Markup Language ) : langage de description structurale de documents, bas sur la notion denvironnement et de dlimiteurs, utilis pour crer les pages web, HTTP ( HyperText Transfer Protocol ) : protocole de transfert de chiers utilis sur le web, HTTPD ( HTTP Daemon ) : partie principale dun serveur web qui change, via HTTP, des chiers avec les clients web (navigateurs),
264
Conclusion
Alcve - Programmer en PHP
JPEG : format dimages compresss trs utilis sur le web, LDAP ( Lightweight Directory Access Protocol ) : protocole normalis daccs aux services dannuaires, PHP ( PHP : Hypertext PreProcessor ) : langage de script ct serveur, embarqu dans les pages HTML, PNG ( Portable Network Graphics ) : format libre dimages compresss cr pour fournir une alternative libre au format GIF,
265
Conclusion
Alcve - Programmer en PHP
POST : mthode HTTP de transmission de formulaires dans le corps de la requte (alternative la mthode GET), Regex : raccourci pour Regular Expressions , syntaxe pour raliser des manipulations complexes sur les chanes de caractres, Session PHP : mcanisme de sauvegarde dinformations entre deux accs (requtes HTTP), SGBD : Systme de Gestion de Bases de Donnes,
266
Conclusion
Alcve - Programmer en PHP
SQL ( Structured Query Langage ) : langage structur de requte pour interroger des SGBDs, URL ( Uniform Resource Locator ) : syntaxe utilise pour localiser une ressource (chier) sur le web (ex : http ://www.php.net/index.html) WWW ( World Wide Web ) : aussi appell web, cest le nom donn au rseau Internet, XML ( eXtensible Markup Language ) : standard ouvert de description de donnes bas sur lutilisation de marqueurs decrivant les donnes quils encapsulent.
267