You are on page 1of 134

Programmer en PHP

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

Table des matires


Chapitre 1 Introduction au langage 1.1 La programmation web 1.2 Prsentation de PHP 1.3 Installation et conguration de PHP Chapitre 2 Les bases du langage 2.1 Syntaxe du langage 2.2 Les structures de contrle 2.3 Fonctions 2.4 Programmation oriente objet Chapitre 3 Fonctionnalits essentielles 3.1 Connexions et utilisateurs 3.2 Gestion des sessions 3.3 Autres fonctionnalits Chapitre 4 Utilisation avance 3 5 18 29 38 40 78 112 126 138 140 149 169 180
2

4.1 Interoprabilit avec des applicatifs 4.2 Traitement des chanes de caractres 4.3 Fonctionnalits utiles 4.4 Conclusion

182 202 217 254

Chapitre 1
Alcve - Programmer en PHP

Introduction au langage

Introduction au langage
Alcve - Programmer en PHP

Objectifs du chapitre Principes de la programmation web ; Prsentation de PHP ; Installation et conguration.

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

Server-side scripting CGI (Perl, C, Shell...) Servlets (Java)

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"

APPEL "variables" RSULTAT Programme externe

Formulaire HTML Browser

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

Installation et conguration de PHP

30

Installation et conguration de PHP


Alcve - Programmer en PHP

Objectifs de la section Installation de PHP ; Conguration via php3.ini/php.ini ; Premier test ; Ajout de nouveaux modules.

31

Installation et conguration de PHP


Alcve - Programmer en PHP

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

Installation et conguration de PHP


Alcve - Programmer en PHP

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

Installation et conguration de PHP


Alcve - Programmer en PHP

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

Installation et conguration de PHP


Alcve - Programmer en PHP

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

Installation et conguration de PHP


Alcve - Programmer en PHP

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

Installation et conguration de PHP


Alcve - Programmer en PHP

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

Installation et conguration de PHP


Alcve - Programmer en PHP

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

Les bases du langage

39

Les bases du langage


Alcve - Programmer en PHP

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 :

$a[1] = "V1" ; $b = "a" ; Rsultat : ${$b}[1] == "V1"

$a = "V2" ; $b[1] = "a" ; Rsultat : ${$b[1]} == "V2"

Conclusion : ${$b}[1] et ${$b[1]} sutilisent dans 2 contextes diffrents.

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

Variables denvironnement CGI :


SERVER_SOFTWARE GATEWAY_INTERFACE SERVER_PORT PATH_INFO SCRIPT_NAME REMOTE_HOST AUTH_TYPE REMOTE_IDENT CONTENT_LENGTH SERVER_NAME SERVER_PROTOCOL REQUEST_METHOD PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_USER CONTENT_TYPE

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

Les structures de contrle

79

Les structures de contrle


Alcve - Programmer en PHP

Objectifs de la section Introduction ; Instructions conditionnelles ; Boucles ; Inclusions.

80

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

Prototype : if (condition) { # instructions excuter si la condition est vraie... } Une chaine de caractre ne contenant que 0 sera value comme fausse ;

84

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

Ex : if ($type == "Femme") { echo "Bonjour Madame" ; } elseif ($type == "Homme") { echo "Bonjour Monsieur" ; } else { echo "Bonjour, vous tes bizarre !" ; }

90

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

Ex : compter jusqu 10 $i = 1 ; while ($i <= 10) { echo "$i " ; $i++ ; } Afche 1 2 3 4 5 6 7 8 9 10.

94

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

Prototype : do { # instructions excuter la premire fois et ensuite tant que la condition est vraie... } while (condition) ;

96

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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 structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

Ex : switch ($type) { case "Femme" : echo "Bonjour Madame" ; break ; case "Homme" : echo "Bonjour Monsieur" ; break ; default : echo "Bonjour, vous tes bizarre !" ; }
110

Les structures de contrle


Alcve - Programmer en PHP

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

Les structures de contrle


Alcve - Programmer en PHP

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

Programmation oriente objet

127

Programmation oriente objet


Alcve - Programmer en PHP

Objectifs de la section Rappels sur la programmation oriente objet ; Les classes en PHP ; Les objets en PHP ; Particularits de PHP.

128

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

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

Programmation oriente objet


Alcve - Programmer en PHP

# 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

Objectifs de la section Gestion des utilisateurs - authentication ; Gestion des connexions.

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

Gestion des sessions

150

Gestion des sessions


Alcve - Programmer en PHP

Objectifs de la section Principe ; Sessions avec PHPlib ; Sessions avec PHP4.

151

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

Ex : session.php < ?php page_open(array("sess" => "MaSession")) ; if( !isset($toto)) $toto = 1 ; print ++$toto ; $sess->register("toto") ; page_close() ; ?>

160

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

class MaSession extends Session { var $classname = "MaSession" ; var $mode = "cookie" ; var $lifetime = 6000 ; var $that_class = "MonContainerSql" ; } ?>

162

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Gestion des sessions


Alcve - Programmer en PHP

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

Objectifs de la section Rcupration et traitement des erreurs ; Les cookies.

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.

Ex : error_log("Alerte rouge", 1, "webmaster@monsite.fr") ;


175

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

Interoprabilit avec des applicatifs

183

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

Objectifs de la section Utilisation des SGBDs ; Interfaage avec lAPI Apache ; Utilisation de LDAP.

184

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

Bases SQL supportes :


Adabas D Informix MySQL PostgreSQL Sybase Empress Interbase ODBC (Access, MS-SQL, iODBC...) Raima Velocis IBM DB2 mSQL Oracle Solid

Autres SGBD supports : dBase, lePro (lecture seule), dbm (ndbm, gdbm, Berkeley db).

186

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

Ex (suite) : afchage de la table et suppression dune entre SELECT * FROM Personne


Secu 132456789 987654321 Nom Smith Gates Prenom John Bill

DELETE FROM Personne WHERE Nom = Gates

189

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

< ?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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Interoprabilit avec des applicatifs


Alcve - Programmer en PHP

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

Traitement des chanes de caractres

203

Traitement des chanes de caractres


Alcve - Programmer en PHP

Objectifs de la section Manipulation des chanes de caractres ; Expressions rgulires.

204

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

[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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Traitement des chanes de caractres


Alcve - Programmer en PHP

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

Avant : <IMG src = "bouton.php ?texte=Mon+titre"> Aprs :

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

Objectifs du chapitre Conseils de programmation PHP ; Lavenir de PHP ; Rfrences ; Glossaire.

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