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

Cour Php 5 avancé

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