php5 avancé

822
Éric Daspet Cyril Pierre de Geyer Préface de Damien Seguy PHP 5 avancé 4 e édition

Upload: jose-de-araujo-fernandes

Post on 14-Aug-2015

179 views

Category:

Technology


4 download

TRANSCRIPT

  • PHP 5 avanc4e dition

    97

    82

    21

    21

    21

    67

    4

    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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXI

    Pourquoi ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXI

    Structure de louvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXII

    Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXIV

    CHAPITRE 1

    Quest-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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    Les chiffres dutilisation en France . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14La communaut franaise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Les ressources daide francophones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Les ressources daide anglophones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    CHAPITRE 2

    Installer et configurer PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    Migration vers PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    Incompatibilits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28PHP en ligne de commande et en CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    Modes dinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    Installer PHP 5 sous MS-Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    Installation automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Installation manuelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    Installer PHP 5 sous Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    Utilisation 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    Utilisation des modules et des extensions . . . . . . . . . . . . . . . . . . . . . . . . . 45Les directives de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Gestion de la configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    CHAPITRE 3

    Les structures de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    Insertion 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 matiresIX

    Enchanement des instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Structure du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Excuter du code PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    Constantes et variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

    Types de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    Boolens (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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    Les 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    Les conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Les instructions darrt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

    Les fonctions utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

    Dclaration 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 . . . . . . . . . . . . . . . . . . . . . . . . 105

    Diffrence entre require() et include() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106require_once() et include_once() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    CHAPITRE 5

    Traitements de chanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

    Fonctions daffichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

    Affichages simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Affichages avec masques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

    Informations sur une chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    Accder un caractre prcis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Valeur ASCII dun caractre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Taille dune chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Position dune sous-chane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Prsence de certains caractres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    Conversions et formatages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    Protections et chappements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Conventions daffichage locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Jeux de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

    Manipulations sur les chanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    Recherche 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    Taille dun tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    Recherche 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 matiresXI

    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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

    Navigation dans les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

    CHAPITRE 7

    Fonctions usuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

    Fonction daffichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Informations 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

    Formulaires HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167Nouveauts depuis PHP 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

    Caractres spciaux et HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

    Cration du formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169Dclaration 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 matiresXIII

    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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

    Gestion 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 . . . . . . . . . . . . . . . . . . . . . . 199

    Descriptif du contexte Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

    Client-serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199En-tte et contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Variables superglobales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

    Informations sur le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

    Nom du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Racine du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Autres informations sur le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

    Authentification HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

    Principes du protocole HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204Gestion avec PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204Authentification par le serveur web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

    Paramtres de la connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

    Adresse IP et port du client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Adresse IP et port du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    Description de la requte HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    Paramtres 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

    Nom du script excut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

    Interactions PHP/JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    Ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    Lecture des arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Nombre darguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

    CHAPITRE 10

    Les cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

    Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

    Forme du cookie sur votre ordinateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

    Lecture et criture dun cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

    Envoi dun cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Lecture dun cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Suppression dun cookie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220Modifier les valeurs dun cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

    Validit et date dexpiration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

    Tableaux et types complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

    Restriction de porte du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    Limitations et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

    Limitations dues aux navigateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225Les cookies nont aucune scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

    Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

    Outil de personnalisation daffichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

    CHAPITRE 11

    Les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

    Quest-ce quune session ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

    Lecture et criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

    Utilisation 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 matiresXV

    Stockage des donnes de session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Paramtres du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Accs concurrents aux sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

    Configuration de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

    Initialisation des sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Stockage des donnes de session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Paramtres du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Expiration des sessions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Gestion du cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Transmission de lidentifiant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

    Gestionnaires de sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

    Dfinir un gestionnaire personnalis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

    Limitations et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

    Cachez 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

    Authentification par formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

    CHAPITRE 12

    Gestion des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

    Introduction aux objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

    Pourquoi programmer en objet ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Quest-ce quun objet ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Quest-ce quune classe ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Quest-ce quune instance ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

    Utilisation simple des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

    Dclarer une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Utilisation des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Vrifier le type dun objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

    Copie et rfrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

    Le 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

    Constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269Destructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

    La notion dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

    Dfinition de la notion dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Dfinition dune classe hrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Redfinition dattribut ou de mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Accs aux mthodes parentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

    Sret de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

    Typage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279Classes abstraites et interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

    Accs statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

    Accs une classe arbitraire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Dfinition en vue dun accs statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Accs la classe en cours. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Accs la classe parente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

    Chargement automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

    Utilisation via les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

    Utilisation de __sleep() et __wakeup(). . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

    Surcharge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

    Affectations des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Lecture dattribut (Mutator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Appel dune mthode (Accessor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

    Itrateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

    Utilisation simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288Utilisation complte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

    Notations dindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

    Auto-incrmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

    Coupler PHP et UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

    Introspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

    Principes pour dmarrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Les fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

    PHP Livre Page XVI Mercredi, 5. septembre 2007 6:12 18

  • Table des matiresXVII

    Les objets, classes et interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

    Les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

    CHAPITRE 13

    Gestion de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

    Lecture et criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

    Fonctions daccs rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

    Ouverture dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

    Lecture dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

    criture dans un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

    Positions dans le fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

    Fermeture dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

    Gestion du tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

    Accs concurrents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

    Manipulation de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

    Copie et dplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

    Cration et effacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

    Liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

    Gestion des rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

    Parcourir un rpertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

    Position dans larborescence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

    Crations et effacements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

    Informations sur les fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

    Existence dun fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

    Dates de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

    Taille de fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

    Espace disque disponible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

    Nom et adresse dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

    Nature des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

    Liens symboliques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

    Permissions et droits daccs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

    Changement de propritaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

    Modifier les permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

    Masque 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

    Excution de programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Lancement 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

    Principes et utilisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375Principe 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 matiresXIX

    Rcupration du contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

    Imbrication de tampons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

    Informations sur le tampon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

    Filtres automatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

    Compression des pages avec zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

    Conversion entre jeux de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

    Filtres utilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

    Automatisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

    Tampon interne de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

    Dlai avant affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

    Vider le tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

    Autres tampons en jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

    CHAPITRE 16

    Envoyer et recevoir des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

    De lutilit de grer des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

    Webmail Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

    Mise en uvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

    Prrequis techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

    Anatomie dun e-mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

    Envoyer des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

    Courrier lectronique multimdia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

    Envoyer des e-mails au format HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

    Envoyer des pices jointes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

    Recevoir des e-mails. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

    Astuces et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406

    Lancer un script la rception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406

    Vrification dune adresse e-mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

    Espacer vos envois en masse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

    Bibliothques Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

    HTML Mime mail par phpguru.org . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

    Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

    Gestion 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

    Quest-ce quun SGBD ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413Travailler avec un SGBD relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

    Prsentation de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

    Points forts/points faibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415Fonctionnalits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417Types de tables MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

    Outils dadministration Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

    phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

    Les commandes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

    Crer 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 . . . . . . . . . . . . . . . . . . . . 443

    Approche classique PHP 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

    PDO, PHP Data Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445

    Particularits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445

    Utiliser votre base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

    Structure des classes de PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

    Prise en main rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448

    Connexion au serveur de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

    Structure du DSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

    PHP Livre Page XX Mercredi, 5. septembre 2007 6:12 18

  • Table des matiresXXI

    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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

    Requtes invalides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Requte de slection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Requte dinsertion / modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461Scurit et chappements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

    Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

    Utiliser les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466

    Gestion des transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466

    Les 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

    Gestion de publication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

    CHAPITRE 19

    Erreurs et exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

    Explications sur les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

    Quest-ce quune erreur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483Pourquoi grer les erreurs ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484Que faire avec les erreurs ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484

    Les erreurs PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

    Description 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

    Description dune assertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Utilisation dune assertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Dsactivation des assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Configuration des assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Personnalisation de la gestion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502

    Les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503

    Description dune exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503Lancement dune exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Rception dune exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Filtrage des exceptions reues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505Propagation des exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506Utilisation des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508

    Politiques de gestion derreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

    Le 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

    De lutilit du XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

    Gains apports par XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514Exemples dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514

    Prsentation et prrequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514

    Structure du XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515Principaux formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519

    Grer le XML la main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521

    Cration dun nouveau fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521Relecture et manipulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523

    Ecrire du XML avec XMLWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523

    Prise en main rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524Fonctionnalits avances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525

    Utilisation de SimpleXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526

    Import et export dun document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527

    PHP Livre Page XXII Mercredi, 5. septembre 2007 6:12 18

  • Table des matiresXXIII

    Manipulation des lments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528

    Manipulation des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532

    Recherche Xpath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533

    Extension des objets SimpleXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

    Cas dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

    Lecture dun fichier RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

    CHAPITRE 21

    XML avanc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

    Relecture dun XML avec SAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

    Fonctionnement des vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540

    Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541

    Ragir des vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

    Envoi des donnes et analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

    Manipulation avec DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549

    Structure gnrale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550

    Lobjet document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551

    Description dun n ud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553

    Navigation dans larbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555

    Gestion des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560

    Cration de nuds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562

    Modification de larbre XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564

    Cration dun document complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566

    Recherche Xpath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567

    Extension des classes DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568

    Utilisation de Xinclude. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569

    Validation et conformit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569

    Transformation XML par XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570

    Utilisation du module XSL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570

    Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571

    Chargement de la feuille de style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571

    Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571

    Paramtres de transformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572

    Extensions et interactions avec PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572

    PHP Livre Page XXIII Mercredi, 5. septembre 2007 6:12 18

  • PHP 5 avancXXIV

    CHAPITRE 22

    Les services web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575

    Introduction aux services web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575

    Protocoles et technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575Principe dun appel un service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579

    Utilisation simple (avec WSDL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583

    Crer un client SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584Crer un serveur SOAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585Persistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589Cache WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590

    Utiliser SOAP sans WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591

    Crer un client SOAP sans WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591Serveur SOAP sans WSDL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592Gestion des types et des structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593

    Compatibilit .Net et formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595

    Diffrents formats de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595Compatibilit avec un service .Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596

    Autres dtails et possibilits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596

    Codage caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596Dfinir des en-ttes SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597Utiliser un autre transport que HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598

    Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598

    Erreurs reues par un client SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599Utilisation des traces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599Renvoyer une erreur dans un serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600

    CHAPITRE 23

    Les templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601

    De lutilit des templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601

    Moteurs de templates Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602

    Une solution lgre : PHPLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602Le couteau suisse : smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602Un systme original : Templeet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603

    Diffrentes approches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603

    Lapproche PHP natif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604

    PHP Livre Page XXIV Mercredi, 5. septembre 2007 6:12 18

  • Table des matiresXXV

    Lapproche search&replace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606Lapproche par composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608Utilisation de XML et XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609

    Analyse et choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610

    Prennit de la solution retenue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611Simplicit pour les graphistes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611Simplicit pour les dveloppeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612Les performances du moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612

    Bibliothques Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

    PHPLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616Templeet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622

    CHAPITRE 24

    Les systmes de cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627

    De lutilit des caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627

    Outils de cache Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628

    Mise en uvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628

    Les caches globaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628

    Cache dune page HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629Cache de fichiers de diffrents types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631Cache de configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632

    Cache des donnes utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632

    Cache par session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633

    Les caches HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633

    Dates de mises jour des fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634Utilisation des serveurs proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635Utiliser la date dexpiration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637

    Mise jour du cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637

    Dtection de la modification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638Temps de validit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638Sites semi-statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639

    Pear::Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639

    La 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649

    Utilit de la gestion dimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649

    Prrequis techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650

    Initialisation et utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650La 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 . . . . . . . . . 667

    La bibliothque Open Source JpGraph . . . . . . . . . . . . . . . . . . . . . . . . . 668Installation 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 matiresXXVII

    Les graphiques base de lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673Les graphiques en camembert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676Dautres types de graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679

    tude de cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680

    Redimensionner des images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680Superposer des images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683

    CHAPITRE 26

    Expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685

    Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685

    Protections et chappements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686Dlimitation et prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686Chane de recherche simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687Construction dexpression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688Gestion des occurrences multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693Captures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695Modificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696

    Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697

    Chercher une correspondance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697Faire des remplacements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699chappement et protections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702

    Performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703

    Fonctionnement du moteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703Stratgies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704Boucles infinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704

    CHAPITRE 27

    Scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705

    Quest-ce que la scurit ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705

    Proccupations du gestionnaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706Proccupations de lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706Pourquoi parler de lutilisateur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707

    Configuration et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708

    Interface 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717

    Vrification des entres utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717viter les principales attaques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721Emplacement des contrles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725Grer les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728Scuriser les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728Chiffrement et scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729

    Bonnes habitudes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731

    Vrifiez vos rsultats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732Ne croyez pas lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733Nexagrez pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734Faites faire un audit externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734

    CHAPITRE 28

    Outils de dveloppement PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735

    diteurs de texte & IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735

    UltraEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736PHPEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744Le Zend Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746

    Les outils de modlisation/RAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749

    Macromedia Dreamweaver MX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749WaterProof ::UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754UML2PHP5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759

    CHAPITRE 29

    Les frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763

    Ce 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 matiresXXIX

    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 lesressources 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, organis