Upload
mgjwt-david
View
249
Download
5
Embed Size (px)
Citation preview
PHP 5 avanc4e dition
9782212
121674
Code
di
teur
:G1
2167
ISBN
:97
8-2-
212-
1216
7-4
. DaspetIngnieur consultant sur les technologies webOpen Source, ric Daspetdveloppe une expertiseautour de PHP depuis 1996.Contributeur Openweb.eu.org, il sattache promouvoir la qualit et linteroprabilit des dveloppements web et est lun des cofondateursdes confrences Paris-Web.
C. Pierre de GeyerCyril Pierre de Geyerest responsable technique de la socit Anaska,spcialise dans la formationaux technologies OpenSource. Il est cofondateur de lAFUP (Associationfranaise des Utilisateurs de PHP) et participe aux sites PHPteam.net et PHPfrance. Il a sonactif des rfrencesimportantes et son expertisela amen intervenir dansde nombreuses confrencesinternationales.
La socit Anaska et ses formateurs ontparticip llaborationde ce livre.
.
Das
pet
C.
Pie
rre
de G
eyer
Conc
eptio
n:
Nor
d Co
mpo
r i c D a s p e t
C y r i l P i e r r e d e G e y e r
P r f a c e d e D a m i e n S e g u y
PHP 5 avanc
4e dition
PHP 5, plate-forme de rfrence pour les applications webPHP 5 est plus que jamais la plate-forme incontournable pour le dveloppement dapplications web professionnelles :programmation objet, services web, couche dabstraction de base de donnes native PDO, simplification des dveloppements XML avec SimpleXML, refonte du moteur sous-jacent pour dimportants gains de performances
Une bible magistrale avec de nombreux cas pratiques et retours dexprienceSappuyant sur de nombreux retours dexprience et cas pratiques, ce livre aidera le dveloppeur voluer avecaisance dans le riche univers de PHP 5 et lui donnera toutes les cls pour en matriser les subtilits : bonnes pratiques de conception de sites et dapplications web, frameworks, cookies et sessions, programmation objet, utilisation de XML et SimpleXML, services web, intgration aux bases de donnes en passant par MySQL 4 et 5,PostgreSQL, PHP Data Object, stratgies doptimisation et de scurit, gestion des images et des caches.
Au sommaireQuest-ce que PHP ? Architecture et rouages de PHP 5 Installation et configuration sous Unix/Linux et MS-Windows Le fichier php.ini Migration et incompatibilits Structures et traitements de base Traitementsde chanes Tableaux Fonctions usuelles Formulaires et superglobales Validation avec lextension Filter Contexte web : client-serveur, en-ttes, superglobales Application HTTP Requtes Cookies et sessions Limitation et scurit Gestion des objets Copie et rfrence Constructeurs et destructeurs Hritage etsurcharge Itrateurs et index UML pour PHP Gestion et manipulation de fichiers Gestion des rpertoires Scurit et droits daccs Gestion documentaire Gestion des flux Excution de programmes Sockets rseau Flux de sortie PHP Envoyer et recevoir des e-mails MySQL et bases de donnes Commandes SQL Utiliser MySQL 4 et 5 avec PHP PHP Data Object Alternatives MySQL : SQLite, Oracle,PostgreSQL Erreurs PHP et exception Assertions Concepts XML et SimpleXML Grer le XML la main SAX, DOM, XSLT, XML Writer Services Web Templates Systmes de cache Gestion des images Expressions rgulires Configuration et scurit Outils de dveloppement PHP Outils de modlisation RAD Frameworks MVC Symfony Ressources en ligne.
qui sadresse cet ouvrage ? Aux dveloppeurs souhaitant comprendre PHP 5 et son modle objet Aux dveloppeurs et administrateurs de sites et dapplications web Aux tudiants en informatique souhaitant apprhender les techniques du Web
Recommand par
42
avan
c4
ed
itio
nPH
P5
12167_PHP5avance4eEdition_XP 12/09/07 11:45 Page 1
Lune des grandes forces de PHP est sa facilit de prise en main. Il se rvle pratique mettre en uvre grce sa documentation de rfrence et aux nombreuses applicationsdisponibles.PHP est un langage didactique car il ne masque pas la complexit et pousse lutilisateur comprendre et appliquer les standards. linverse, dautres technologies encadrentbeaucoup lutilisateur et labandonnent lorsque les problmes deviennent plus complexes.PHP distille progressivement les technologies quil exploite, et donne toujours auprogrammeur la possibilit daller plus loin.La matrise du langage (on pourrait mme parler de plate-forme) requiert donc un appren-tissage permanent, qui va de pair avec lutilisation de PHP. Pour aller plus vite avec PHP, ilfaut exprimenter, ou profiter de lexprience des autres. Cest dans ce sens que PHP 5avanc a t pens : il est fait pour ceux qui veulent aller plus loin, et plus vite.
PHP 5 avanc est un livre garder ct de son clavier. Contrairement aux autres livrespdagogiques, il propose un panorama trs large du langage. Il fournit des mthodes pourchaque aspect de la programmation.Bien sr, on y retrouve tout ce qui a fait le succs de PHP 4, mais le livre se concentresurtout sur les nouveauts introduites en PHP 5. Cette nouvelle volution du langageintroduit la programmation objet moderne, simplifie le XML, met sur le devant de lascne SQLite et lve le niveau de programmation en gnral. PHP 5 est aussi la preuveque les projets Open Source peuvent rivaliser avec les diteurs propritaires, en termes deniveau de fonctionnalits, de scurit, de fiabilit et au niveau thorique. Ce livre est rsolument tourn vers les informaticiens qui veulent aller plus loin avecPHP et ne jamais manquer de ressources pour toutes leurs applications Web. Il sert derfrence tous ceux qui veulent intelligemment tirer le meilleur de la technologie.
Damien SEGUYResponsable de la documentation PHP franaise
Vice-prsident AFUPWebmestre Nexen.net
Prface
PHP Livre Page V Mercredi, 5. septembre 2007 6:12 18
PHP Livre Page VI Mercredi, 5. septembre 2007 6:12 18
Table des matires
Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXIPourquoi ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXIStructure de louvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXIIRemerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXIV
CHAPITRE 1Quest-ce que PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Introduction PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Un langage Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Que faire avec PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Particularits de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Mode de dveloppement du projet PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Nouveauts de PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10La programmation oriente objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Refonte et simplification de XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Intgration de la base SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Simplification des tches courantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11PDO : socle commun aux SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Architecture et fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Architecture technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Fonctionnement de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancVIII
PHP en France et dans le monde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Les chiffres dutilisation en France . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14La communaut franaise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Les ressources daide francophones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Les ressources daide anglophones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
CHAPITRE 2
Installer et configurer PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Migration vers PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Incompatibilits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28PHP en ligne de commande et en CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Modes dinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Installer PHP 5 sous MS-Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Installation automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Installation manuelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Installer PHP 5 sous Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Utilisation automatise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Installation manuelle dApache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Installation manuelle de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Installation manuelle de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Gestion des droits daccs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Modules additionnels PECL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Configuration de PHP avec php.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Utilisation des modules et des extensions . . . . . . . . . . . . . . . . . . . . . . . . . 45Les directives de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Gestion de la configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
CHAPITRE 3
Les structures de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Insertion de PHP dans HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Balises douverture et de fermeture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
PHP Livre Page VIII Mercredi, 5. septembre 2007 6:12 18
Table des matires IX
Enchanement des instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Structure du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Excuter du code PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Constantes et variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Types de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Boolens (boolean). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Les nombres entiers (integer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Les nombres flottants (double, float) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Les chanes de caractres (string). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Les tableaux (array) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71Transtypage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
CHAPITRE 4
Traitements de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Oprateurs daffectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Oprateurs arithmtiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Oprateurs combins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83La concatnation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Oprateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Oprateurs logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Oprateurs sur les bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Priorits entre oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Structures de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Les conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Les instructions darrt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Les fonctions utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Dclaration dune fonction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Appel de fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Visibilit des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Retourner plusieurs valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Nombre de paramtres indfini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
PHP Livre Page IX Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancX
Inclure des bibliothques ou des fichiers . . . . . . . . . . . . . . . . . . . . . . . . 105Diffrence entre require() et include() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106require_once() et include_once() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
CHAPITRE 5
Traitements de chanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Fonctions daffichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Affichages simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Affichages avec masques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Informations sur une chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Accder un caractre prcis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Valeur ASCII dun caractre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Taille dune chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Position dune sous-chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Prsence de certains caractres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Conversions et formatages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Protections et chappements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Conventions daffichage locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Jeux de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Manipulations sur les chanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Recherche dune sous-chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Rcuprer une sous-chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Remplacer un motif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Fonctions dlagage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Remplissage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Changement de casse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Coupure de paragraphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
CHAPITRE 6
Utilisation des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Taille dun tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Recherche dun lment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Prsence dans le tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Recherche de la cl correspondante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129Nombre doccurrences dun lment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Rcupration alatoire dlments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
PHP Livre Page X Mercredi, 5. septembre 2007 6:12 18
Table des matires XI
Trier les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Tri par valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Tri en ordre inverse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Garder les associations cl-valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Tri par cl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Tri naturel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Trier avec une fonction utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Tri multicritre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Extractions et remplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Affecter des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Srialisation de tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Extraction dun sous-tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Remplacement dun sous-tableau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Gestion des cls et des valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137Liste des cls utilises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137Liste des valeurs utilises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137changer les cls et les valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Fusions et sparations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Fusion de plusieurs tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Sparation dun tableau en plusieurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Diffrences et intersections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Diffrences entre tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Intersections entre deux tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Gestion des doublons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Gestion des piles et des files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141Navigation dans les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
CHAPITRE 7
Fonctions usuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Fonction daffichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Informations de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Affichage de dbogage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Coloration syntaxique de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Fonctions mathmatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148Connatre les extrmits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148Arrondir des valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
PHP Livre Page XI Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXII
Crer des valeurs alatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Travailler sur diffrentes bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Fonctions de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151Formater une date/heure locale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Fonctions rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Rsolution DNS dune adresse IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Corrlation IP/DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Fonctions de chiffrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Quelques dfinitions : chiffrement, hachage, codage/dcodage . . . . . . . . . 157Fonctions de hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Fonctions de codage et dcodage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Excution de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Fonction larrt du script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Excution dune chane de code PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164Login/mot de passe scuriss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
CHAPITRE 8
Formulaires et superglobales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167Formulaires HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Nouveauts depuis PHP 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Caractres spciaux et HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Cration du formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Dclaration dun formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169Mthode denvoi du formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170Champ de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171Zone de texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Cases cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174Bouton radio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175Liste de slections et liste droulante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Champs cachs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Les champs pour mot de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Image cliquable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Envoi dimages et de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Rception des donnes en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Utilisation des superglobales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Rcupration dune donne simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
PHP Livre Page XII Mercredi, 5. septembre 2007 6:12 18
Table des matires XIII
Retours la ligne et zones de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182Utilisation des cases cocher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184Validation de donnes avec lextension Filter . . . . . . . . . . . . . . . . . . . . . . 184Listes slections multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191Gestion des images cliquables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Tlchargements dimages et de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 192Formulaire dynamique et tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Autres problmatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Gestion du temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Gestion de la taille des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Stockage des fichiers temporaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Scurit et donnes reues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Procdure de gestion des formulaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
CHAPITRE 9
Environnement web et superglobales . . . . . . . . . . . . . . . . . . . . . . 199Descriptif du contexte Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Client-serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199En-tte et contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Variables superglobales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Informations sur le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201Nom du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Racine du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Autres informations sur le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Authentification HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203Principes du protocole HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204Gestion avec PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204Authentification par le serveur web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Paramtres de la connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Adresse IP et port du client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Adresse IP et port du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Description de la requte HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208Paramtres de la requte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Ladresse demande (URL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Informations fournies par le client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
PHP Livre Page XIII Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXIV
Environnement systme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212Nom du script excut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Interactions PHP/JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Lecture des arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Nombre darguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
CHAPITRE 10
Les cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Forme du cookie sur votre ordinateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Lecture et criture dun cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Envoi dun cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Lecture dun cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Suppression dun cookie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220Modifier les valeurs dun cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Validit et date dexpiration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221Tableaux et types complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Restriction de porte du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Limitations et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Limitations dues aux navigateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225Les cookies nont aucune scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226Outil de personnalisation daffichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
CHAPITRE 11
Les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231Quest-ce quune session ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231Lecture et criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232Utilisation avance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Fonctionnement interne des sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Suppression dune session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Dfinition manuelle de linitialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
PHP Livre Page XIV Mercredi, 5. septembre 2007 6:12 18
Table des matires XV
Stockage des donnes de session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Paramtres du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Accs concurrents aux sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Configuration de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Initialisation des sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Stockage des donnes de session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Paramtres du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Expiration des sessions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Gestion du cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Transmission de lidentifiant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Gestionnaires de sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Dfinir un gestionnaire personnalis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Limitations et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Cachez les sessions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Nutilisez pas la rcriture des liens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Les identifiants par dfaut suffisent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Attaque par fixation de session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Vrifiez lidentit de lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Nayez pas confiance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247Authentification par formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
CHAPITRE 12
Gestion des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Introduction aux objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Pourquoi programmer en objet ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Quest-ce quun objet ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Quest-ce quune classe ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Quest-ce quune instance ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Utilisation simple des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Dclarer une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Utilisation des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Vrifier le type dun objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Copie et rfrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264Le comportement PHP 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264PHP 5, le passage par rfrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
PHP Livre Page XV Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXVI
Garder la compatibilit avec PHP 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266La copie explicite dobjet, ou clonage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266galit et identit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Constructeurs et destructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269Constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269Destructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
La notion dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Dfinition de la notion dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Dfinition dune classe hrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Redfinition dattribut ou de mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Accs aux mthodes parentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Sret de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Typage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279Classes abstraites et interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Accs statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Accs une classe arbitraire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Dfinition en vue dun accs statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Accs la classe en cours. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Accs la classe parente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Chargement automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285Utilisation via les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Utilisation de __sleep() et __wakeup(). . . . . . . . . . . . . . . . . . . . . . . . . . . . 285Surcharge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Affectations des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Lecture dattribut (Mutator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Appel dune mthode (Accessor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Itrateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288Utilisation simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288Utilisation complte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Notations dindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292Auto-incrmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Coupler PHP et UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294Introspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Principes pour dmarrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Les fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
PHP Livre Page XVI Mercredi, 5. septembre 2007 6:12 18
Table des matires XVII
Les objets, classes et interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300Les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
CHAPITRE 13
Gestion de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303Lecture et criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Fonctions daccs rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Ouverture dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310Lecture dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313criture dans un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314Positions dans le fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315Fermeture dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317Gestion du tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317Accs concurrents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Manipulation de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320Copie et dplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320Cration et effacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321Liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Gestion des rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323Parcourir un rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323Position dans larborescence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325Crations et effacements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Informations sur les fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326Existence dun fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327Dates de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327Taille de fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328Espace disque disponible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328Nom et adresse dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Nature des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Liens symboliques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Permissions et droits daccs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330Changement de propritaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Modifier les permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Masque par dfaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
PHP Livre Page XVII Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXVIII
Scurit et fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Permissions et droits daccs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Arguments utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Safe_mode et open_basedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334Outil de gestion documentaire simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
CHAPITRE 14
Gestion des flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Excution de programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Lancement sans interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Lancement interactif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341Scurit et programmes externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Gestion des sockets rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Ouverture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348Lecture et criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349Fermeture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349Fonctions de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Gestion unifie des flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351Types de flux grs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352Utilisation simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Contextes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361Types personnaliss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Systme de paiement en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Sauvegardes automatiques pour interface rseau . . . . . . . . . . . . . . . . . . . . 369Conversion entre jeux de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
CHAPITRE 15
Flux de sortie PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375Principes et utilisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Principe de fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375Exemples dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Gestion du tampon de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377Dbut et arrt de la mise en tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
PHP Livre Page XVIII Mercredi, 5. septembre 2007 6:12 18
Table des matires XIX
Rcupration du contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377Imbrication de tampons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379Informations sur le tampon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Filtres automatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380Compression des pages avec zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380Conversion entre jeux de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381Filtres utilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382Automatisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Tampon interne de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384Dlai avant affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384Vider le tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384Autres tampons en jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
CHAPITRE 16
Envoyer et recevoir des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385De lutilit de grer des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Webmail Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386Mise en uvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Prrequis techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388Anatomie dun e-mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389Envoyer des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390Courrier lectronique multimdia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393Envoyer des e-mails au format HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . 395Envoyer des pices jointes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397Recevoir des e-mails. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Astuces et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406Lancer un script la rception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406Vrification dune adresse e-mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407Espacer vos envois en masse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Bibliothques Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408HTML Mime mail par phpguru.org . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411Gestion dune lettre dinformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
PHP Livre Page XIX Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXX
CHAPITRE 17
Travailler avec une base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Utilisation dun SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413Quest-ce quun SGBD ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413Travailler avec un SGBD relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Prsentation de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415Points forts/points faibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415Fonctionnalits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417Types de tables MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Outils dadministration Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . 421phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Les commandes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423Crer une base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424Crer des tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425Modifier des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431Supprimer des tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432Insrer des donnes (INSERT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432Modifier des donnes (UPDATE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434Effacer des donnes (DELETE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435Remplacer des donnes (REPLACE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436Filtrer avec la clause WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437Slectionner des donnes (SELECT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438Grer les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
CHAPITRE 18
Utiliser une base de donnes avec PHP . . . . . . . . . . . . . . . . . . . . 443Approche classique PHP 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443PDO, PHP Data Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Particularits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445Utiliser votre base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446Structure des classes de PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Prise en main rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448Connexion au serveur de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Structure du DSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
PHP Livre Page XX Mercredi, 5. septembre 2007 6:12 18
Table des matires XXI
Utiliser des connexions persistantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451Grer les erreurs de connexion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452Fermer une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453Se connecter plusieurs bases de donnes. . . . . . . . . . . . . . . . . . . . . . . . . 454Crer un fichier de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Effectuer une requte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456Requtes invalides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Requte de slection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Requte dinsertion / modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461Scurit et chappements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465Utiliser les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Gestion des transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466Les requtes prpares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Construction de la requte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469Prparer une requte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470Lier des donnes des paramtres et excution. . . . . . . . . . . . . . . . . . . . . 470Exploitation dune requte de slection . . . . . . . . . . . . . . . . . . . . . . . . . . . 472Fermeture de la requte prpare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473Gestion de publication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
CHAPITRE 19
Erreurs et exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483Explications sur les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Quest-ce quune erreur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483Pourquoi grer les erreurs ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484Que faire avec les erreurs ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Les erreurs PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485Description dune erreur PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485Les bases dune gestion derreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486Niveaux derreurs et filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488Crer une erreur manuellement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491Affichage des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492Journalisation des erreurs (log) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493Personnaliser le gestionnaire derreurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
PHP Livre Page XXI Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXXII
Les assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Description dune assertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Utilisation dune assertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Dsactivation des assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Configuration des assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Personnalisation de la gestion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503Description dune exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503Lancement dune exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Rception dune exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Filtrage des exceptions reues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505Propagation des exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506Utilisation des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
Politiques de gestion derreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509Le dveloppement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509tre averti lors dun problme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509Toujours agir lors dune erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510Externaliser les alertes de scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510Gardez des traces sur le contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
CHAPITRE 20
XML : concepts et SimpleXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513De lutilit du XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Gains apports par XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514Exemples dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Prsentation et prrequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514Structure du XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515Principaux formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Grer le XML la main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521Cration dun nouveau fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521Relecture et manipulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Ecrire du XML avec XMLWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523Prise en main rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524Fonctionnalits avances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Utilisation de SimpleXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526Import et export dun document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
PHP Livre Page XXII Mercredi, 5. septembre 2007 6:12 18
Table des matires XXIII
Manipulation des lments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528Manipulation des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532Recherche Xpath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533Extension des objets SimpleXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535Lecture dun fichier RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
CHAPITRE 21
XML avanc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539Relecture dun XML avec SAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Fonctionnement des vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541Ragir des vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543Envoi des donnes et analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Manipulation avec DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549Structure gnrale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550Lobjet document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551Description dun n ud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553Navigation dans larbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555Gestion des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560Cration de nuds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562Modification de larbre XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564Cration dun document complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566Recherche Xpath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567Extension des classes DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568Utilisation de Xinclude. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569Validation et conformit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
Transformation XML par XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570Utilisation du module XSL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571Chargement de la feuille de style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571Paramtres de transformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572Extensions et interactions avec PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
PHP Livre Page XXIII Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXXIV
CHAPITRE 22
Les services web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575Introduction aux services web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
Protocoles et technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575Principe dun appel un service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Utilisation simple (avec WSDL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583Crer un client SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584Crer un serveur SOAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585Persistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589Cache WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Utiliser SOAP sans WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591Crer un client SOAP sans WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591Serveur SOAP sans WSDL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592Gestion des types et des structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Compatibilit .Net et formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595Diffrents formats de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595Compatibilit avec un service .Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Autres dtails et possibilits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596Codage caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596Dfinir des en-ttes SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597Utiliser un autre transport que HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598Erreurs reues par un client SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599Utilisation des traces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599Renvoyer une erreur dans un serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
CHAPITRE 23
Les templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601De lutilit des templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601Moteurs de templates Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Une solution lgre : PHPLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602Le couteau suisse : smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602Un systme original : Templeet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
Diffrentes approches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603Lapproche PHP natif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
PHP Livre Page XXIV Mercredi, 5. septembre 2007 6:12 18
Table des matires XXV
Lapproche search&replace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606Lapproche par composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608Utilisation de XML et XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Analyse et choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610Prennit de la solution retenue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611Simplicit pour les graphistes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611Simplicit pour les dveloppeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612Les performances du moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Bibliothques Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613PHPLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616Templeet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
CHAPITRE 24
Les systmes de cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627De lutilit des caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627Outils de cache Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628Mise en uvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628Les caches globaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
Cache dune page HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629Cache de fichiers de diffrents types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631Cache de configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Cache des donnes utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632Cache par session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Les caches HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633Dates de mises jour des fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634Utilisation des serveurs proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635Utiliser la date dexpiration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
Mise jour du cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637Dtection de la modification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638Temps de validit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638Sites semi-statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
Pear::Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639La classe gnrique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
PHP Livre Page XXV Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXXVI
Classe pour le Cache HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642Autres caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
Pear::Cache_Lite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644Spcialisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
tude de cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646Cache pour un site dactualit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
CHAPITRE 25
Gestion des images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649Utilit de la gestion dimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649Prrequis techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650Initialisation et utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
La cration du modle de limage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650Librer les ressources mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653Affichage de limage sur le navigateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654Enregistrer limage dans un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
Travail sur une image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656Le rfrentiel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656Tracer des formes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656crire du texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659Copie dune zone dimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663Gestion de la palette de couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664Connatre la taille dune image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
Astuces et remarques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666viter les fausses couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666Limite de temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666Malvoyants et rfrencement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
Loutil Open Source de gestion dalbums photos : Gallery . . . . . . . . . 667La bibliothque Open Source JpGraph . . . . . . . . . . . . . . . . . . . . . . . . . 668
Installation et configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669Architecture de la JpGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670Cration dun graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671Envoi et enregistrement de limage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672Grer les polices de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672Proprits et mthodes communes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
PHP Livre Page XXVI Mercredi, 5. septembre 2007 6:12 18
Table des matires XXVII
Les graphiques base de lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673Les graphiques en camembert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676Dautres types de graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
tude de cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680Redimensionner des images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680Superposer des images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
CHAPITRE 26
Expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
Protections et chappements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686Dlimitation et prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686Chane de recherche simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687Construction dexpression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688Gestion des occurrences multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693Captures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695Modificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697Chercher une correspondance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697Faire des remplacements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699chappement et protections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
Performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703Fonctionnement du moteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703Stratgies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704Boucles infinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
CHAPITRE 27
Scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705Quest-ce que la scurit ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
Proccupations du gestionnaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706Proccupations de lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706Pourquoi parler de lutilisateur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
Configuration et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708Interface avec le serveur web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709Safe_mode et restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
PHP Livre Page XXVII Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXXVIII
chappement automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713Sessions et identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713Mises jour du logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715Stockage des donnes et fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
Scurit de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717Vrification des entres utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717viter les principales attaques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721Emplacement des contrles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725Grer les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728Scuriser les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728Chiffrement et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Bonnes habitudes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731Vrifiez vos rsultats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732Ne croyez pas lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733Nexagrez pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734Faites faire un audit externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
CHAPITRE 28
Outils de dveloppement PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735diteurs de texte & IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
UltraEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736PHPEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744Le Zend Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Les outils de modlisation/RAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749Macromedia Dreamweaver MX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749WaterProof ::UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754UML2PHP5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
CHAPITRE 29
Les frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763Ce quest un framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
Un cadre de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763La sparation MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764Les avantages dun framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
PHP Livre Page XXVIII Mercredi, 5. septembre 2007 6:12 18
Table des matires XXIX
Quelques frameworks disponibles en Open Source . . . . . . . . . . . . . . . 765Copix et Jelix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765Symfony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766Zend Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766Les autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
Courte introduction Symfony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768Initialisation de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768Gnration du modle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769Premier contrleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769Lien avec la vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771Le test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772Quelques points non abords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
ANNEXE
Ressources en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775Bibliothques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775Applications PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779ERP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
PHP Livre Page XXIX Mercredi, 5. septembre 2007 6:12 18
PHP Livre Page XXX Mercredi, 5. septembre 2007 6:12 18
Avant-propos
Pourquoi ce livre ?Pourquoi crire un livre si son sujet nest pas une affaire de passion ? En effet, pour nous,PHP est une affaire de cur. Nous allons vous transmettre non seulement un savoir maisaussi une exprience et une passion.
PHP peut tre considr comme un des fers de lance du monde Open Source. Toutelimage de cette philosophie de partage et dentraide sexprime travers lui. Et si unebelle ide, on associe un produit fiable, stable, complet et tendu, pourquoi hsiter ?
En dpit de ses atouts, PHP a t longtemps peru par les professionnels comme un outilpour pages personnelles ou petits projets. Certes, il est adapt ce type de missions, maisson spectre daction est nettement plus vaste. Heureusement grce ses qualits intrin-sques et sa communaut qui a russi se faire entendre et sduire, les mentalits ontfini par voluer et PHP a t lev sa juste valeur. Ce livre, nous lavons pens et crit pour des dveloppeurs pointilleux dsirant exploiterau mieux les capacits de PHP. Sans le rendre inaccessible aux dbutants, nous souhai-tions quil soit utile des dveloppeurs professionnels ou dun niveau avanc. Larrivede PHP 5 na finalement t quun prtexte pour nous pencher sur cet ouvrage. Nousavons tous deux des profils diffrents, lun trs technique et puriste, lautre orient vers lefonctionnel, la vulgarisation et la pdagogie. Le rsultat se veut donc trs pointu et trsvaste tout en adoptant une approche pdagogue.
La nouvelle version de PHP rompt avec lancien modle objet : celui-ci, limit, a tremplac par un modle objet complet, et de nombreuses fonctionnalits ayant pour butde faciliter la vie du dveloppeur ont t introduites. Nous avons dsormais un langagemature, adapt des projets web professionnels et qui na pas rougir dune comparaisonavec dautres langages ou architectures.
Ces pages ont t conues de faon souligner ces nouveaux ajouts et fournir une rf-rence utile au jour le jour pour les dveloppeurs PHP. Contrairement dautres ouvragesqui se fondent massivement sur lexcellente documentation de PHP (visible en ligne et jour sur fr.php.net), nous avons souhait raliser un livre qui lui apporte une relle valeurajoute, dpassant le simple talage des fonctions et des paramtres.
PHP Livre Page XXXI Mercredi, 5. septembre 2007 6:12 18
PHP 5 avancXXXII
Structure de louvrageCet ouvrage sarticule autour des thmes abords lors du dveloppement dune applica-tion web. Chaque chapitre est centr sur un de ces thmes. Il dcrit les diffrentes fonc-tionnalits PHP qui sy rapportent mais aussi tout ce qui les entoure et qui permettra deles mettre en uvre. Des exemples concrets, des cas dapplications pratiques et desretours dexpriences seront rgulirement prsents.La premire partie du livre fait office dentre en la matire : Le chapitre 1 donne toutes les informations sur la plate-forme PHP, sa diffusion et les
ressources daide que vous pourrez trouver, francophones et internationales. Le chapitre 2 dtaille les options de configuration les plus importantes et les proc-
dures dinstallation, sous Unix et Microsoft Windows. Il y est galement prsent lesdiffrents points prendre en compte pour une migration de PHP4 vers PHP5.
La partie suivante concerne les fonctionnalits de base du langage. On y trouve lesrappels sur la syntaxe et les structures, puis linterface avec les pages web via les formu-laires ou cookies. Cette partie permet aux dbutants dapprendre les bonnes bases dePHP. Les dveloppeurs confirms pourront, eux, y trouver une rfrence avec quelquesastuces et dtails utiles : Le chapitre 3 fait un rappel des syntaxes de base du langage PHP : types de donnes,
affectation, organisation du code, etc. Le chapitre 4 montre les structures de bases de PHP : les diffrentes boucles et conditions. Le chapitre 5 dtaille les diffrentes fonctions de gestion des chanes de caractres. Le chapitre 6 se focalise sur la gestion des tableaux et les fonctions affrentes. Le chapitre 7 prsente les quelques fonctions usuelles qui ne se rapportent pas un
sujet particulier et qui sont souvent utiles lors de dveloppements. Le chapitre 8 dcrit linteraction entre PHP et les formulaires HTML (variables,
fichiers), ainsi que les superglobales PHP permettant leur manipulation. Le chapitre 9 est le dernier de cette premire partie trs oriente vers la rfrence, il
complte le prcdent en sintressant lenvironnement autour de PHP : principalementla communication avec le serveur web, le systme et le rseau.
La troisime partie entre dans le cur du sujet en se focalisant sur diffrents thmesrencontrs dans le cadre du dveloppement dapplications pousses. Le dveloppeurconfirm y trouvera matire progresser : Le chapitre 10 commence cette section avec une description avance des cookies, de
leur utilisation et de leur environnement. On y retrouvera aussi quelques informationslies la scurit.
Le chapitre 11 prend la suite du chapitre sur les cookies pour voquer les sessions.Outre la description simple de leur utilisation, nous abordons une