1440

PHP 5 - La Bible

Embed Size (px)

Citation preview

  • Copyright 2005 Micro Application20-22, rue des Petits-Htels75010 Paris

    1re dition - Janvier 2005

    Auteurs Laurent GUDON, Damien HEUTE, Thomas HEUTE et Pierre-Emmanuel MULLER

    Toute reprsentation ou reproduction, intgrale ou partielle, faite sans le consentement deMICRO APPLICATION est illicite (article L122-4 du code de la proprit intellectuelle).Cette reprsentation ou reproduction illicite, par quelque procd que ce soit, constitueraitune contrefaon sanctionne par les articles L335-2 et suivants du code de la propritintellectuelle.Le code de la proprit intellectuelle nautorise aux termes de larticle L122-5 que les repro-ductions strictement destines lusage priv et non destines lutilisation collective dunepart, et dautre part, que les analyses et courtes citations dans un but dexemple etdillustration.

    Avertissement Les informations contenues dans cet ouvrage sont donnes titre indicatif et nont aucunaux utilisateurs caractre exhaustif voire certain. A titre dexemple non limitatif, cet ouvrage peut vous pro-

    poser une ou plusieurs adresses de sites Web qui ne seront plus dactualit ou dont lecontenu aura chang au moment o vous en prendrez connaissance.

    Aussi, ces informations ne sauraient engager la responsabilit de lEditeur. La socit MI-CRO APPLICATION ne pourra tre tenue responsable de toute omission, erreur ou lacunequi aurait pu se glisser dans ce produit ainsi que des consquences, quelles quelles soient,qui rsulteraient des informations et indications fournies ainsi que de leur utilisation.

    ISBN : 2-7429-3608-4

    Tous les produits cits dans cet ouvrage sont protgs, et les marques dposes par leurstitulaires de droits respectifs.Cet ouvrage nest ni dit, ni produit par le(s) propritaire(s) de(s) programme(s) surle(s)quel(s) il porte.

    Couverture ralise par Stefanos ATHANASSOPOULOS

    MICRO APPLICATION Support technique20-22, rue des Petits-Htels disponible sur75010 PARIS www.microapp.comTl. : 01 53 34 20 20 - Fax : 01 53 34 20 00http://www.microapp.com

    Mister Onet, lhomme la rfrence, vous montre le chemin !Rendez-vous sur le site Internet de Micro Applicationwww.microapp.com. Dans le module de recherche, sur la pagedaccueil du site, retrouvez Mister Onet. Dans la zone de saisie,entrez la rfrence 4 chiffres quil vous indique sur le prsent livre.Vous accdez directement la fiche produit de ce livre.

    4608

  • Avant-propos

    La collection Bible Micro Application a t conue pour permettre aux utilisateurs avancs experts dapprofondir leurs connaissances dun thme prcis. Exhaustifs, ces ouvrages permettentdacqurir une connaissance intgrale du sujet tudi, la fois en thorie et en pratique.

    Conventions typographiquesAfin de faciliter la comprhension des techniques dcrites, nous avons adopt les conventionstypographiques suivantes :

    j gras : menu, commande, bote de dialogue, bouton, onglet.

    j italique : zone de texte, liste droulante, case cocher, bouton radio.

    j Police bton : instruction, listing, texte saisir.

    : indique un retour la ligne d aux contraintes de la mise en page.

    Au cours de votre lecture, vous rencontrerez les encadrs suivants :

    Propose des trucs pratiques.

    Met laccent sur un point important quil ne faut ngliger aucun prix.

    Mentionne un fichier exemple ou un programme disponible sur le CDdaccompagnement de louvrage.

    Vous recommande une technique ou une marche suivre.

    Vous indique le nom et lemplacement des fichiers tlcharger.

  • Renvoi un site o vous trouverez des infos complmentaires ou des outils tlcharger.

    Il sagit dinformations supplmentaires relatives au sujet trait.

    Fait rfrence un chapitre o vous trouverez des informations complmentaires.

  • Contenu en un clin dil

    Chapitre 1 Introduction 25

    Chapitre 2 Prise en main 49

    Chapitre 3 Le langage PHP 111

    Chapitre 4 Les en-ttes HTTP 251

    Chapitre 5 Les techniques de programmation 295

    Chapitre 6 Les fonctions mathmatiques 325

    Chapitre 7 La manipulation des chanes de caractres 353

    Chapitre 8 La gestion des dates et des calendriers 433

    Chapitre 9 La gestion des fichiers et des rpertoires 485

    Chapitre 10 Lutilisation des bases de donnes 633

    Chapitre 11 Les annuaires LDAP 901

    Chapitre 12 La messagerie : envoi et lecture de mails 959

    Chapitre 13 Les images et les animations Flash 1021

    Chapitre 14 La cration de documents PDF 1137

    Chapitre 15 Lutilisation de XML 1185

    Chapitre 16 La gestion des protocoles HTTP, FTP, SOAP, etc. 1263

    Chapitre 17 Les processus et les identifiants 1309

    Chapitre 18 Linteroprabilit avec COM 1325

    Chapitre 19 Loptimisation des temps de rponse 1339

    Chapitre 20 Lobfuscation : Distribuer ses scripts sans dvoiler son code 1379

    Chapitre 21 Annexe A : des exemples dapplications 1393

    Chapitre 22 Annexe B : les en-ttes HTTP et les variables externes 1419

    Chapitre 23 Annexe C : les erreurs HTTP 1425

    5

  • Sommaire

    Chapitre 1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    quoi sert PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Prsentation, rle et fonctionnement dun langage de script . . . . . . . . . . . 27

    Les version 1 5 de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Rasmus Lerdorf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Naissance et volution de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30La cration de la communaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    La communaut du libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35La machine en marche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Cathdrale et bazar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37La scission : lOpen Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Le droit et les logiciels libres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38PHP et le libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    PHP face ses concurrents (ASP, JSP, etc.) . . . . . . . . . . . . . . . . . . . . . . . . 40PHP face aux autres langages de script web . . . . . . . . . . . . . . . . . . . . . . 40Comparatif PHP/Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Comparatif PHP/ASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Comparatif PHP/JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44En bref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    Pourquoi ont-ils choisi PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Ils ont choisi PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45PHP lassaut du Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    Chapitre 2Prise en main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

    Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Avec Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Avec IIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76Avec iPlanet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

    Le fichier de configuration php.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Options PHP de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Gestion des erreurs et rcupration des messages derreur . . . . . . . . . . . . 87

  • Gestion des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Gestion des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Les magic quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Gnration du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Gestion de laffichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95Extensions dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Configuration des extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    Les diteurs et dbogueurs PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Lartillerie lourde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Les spcialistes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Dreamweaver et GoLive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

    Chapitre 3Le langage PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    Intgrer le code PHP au HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Les balises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Mon premier script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

    Dfinition et syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Les variables dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120Les variables externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

    Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Arithmtiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141Chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Incrmentation et dcrmentation . . . . . . . . . . . . . . . . . . . . . . . . . . 143Comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Contrles derreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Excution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147Priorits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

    Les structures de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148If, else, elseif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148While, do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152For, foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

    Sommaire

  • Break, continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

    La syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159La porte des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160Le passage des paramtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Les paramtres par dfaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Le passage de paramtres par rfrence . . . . . . . . . . . . . . . . . . . . . . . 166Retourner une valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167Manipuler des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168La rcursivit des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

    Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174Les valeurs dun tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175Initialisation dun tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175Les subtilits dinitialisation dun tableau . . . . . . . . . . . . . . . . . . . . . . 176Remplissage dun tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177Les fonctions de manipulation des tableaux . . . . . . . . . . . . . . . . . . . . 178

    Les inclusions de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Inclusions multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Les noms des fichiers inclus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210Les fichiers insrs distants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210Le passage de paramtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Les chemins relatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Cas derreur et code retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Un cas dutilisation pratique mais potentiellement dangereux . . . . . . . . . 214

    Les classes, les objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Dfinir une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220Les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221Les mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227Les interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Les classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Les fonctions de manipulation des objets . . . . . . . . . . . . . . . . . . . . . . 238Programmation avance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Les tableaux en POO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

    Chapitre 4Les en-ttes HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

    Principe gnral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Gestion personnalise de len-tte HTTP . . . . . . . . . . . . . . . . . . . . . . . . . 258

    Redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

    Sommaire

  • Dclaration du type MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260Gestion des caches (des navigateurs) . . . . . . . . . . . . . . . . . . . . . . . . . 261

    Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262En PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264Exemple utilisant des cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

    Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Exemple utilisant des sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Stockage personnalis des variables de sessions . . . . . . . . . . . . . . . . . 277Clore une session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Les autres fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Les fonctions historiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

    Mise en cache avant mission des donnes . . . . . . . . . . . . . . . . . . . . . . . 287Les fonctions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Compression des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289Optimisation des temps de rponse . . . . . . . . . . . . . . . . . . . . . . . . . . 290Gestion du cache interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292Les autres fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

    Chapitre 5Les techniques de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

    Rgles de codage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297Prsentation du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297Programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299Noms de classes, fonctions, variables et constantes . . . . . . . . . . . . . . . . 299Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

    Sparation du code et de la mise en page . . . . . . . . . . . . . . . . . . . . . . . . . 307Utilisation des objets et de linstruction include . . . . . . . . . . . . . . . . . . 307Utilisation des modles (templates) . . . . . . . . . . . . . . . . . . . . . . . . . 309

    Chapitre 6Les fonctions mathmatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

    Les fonctions mathmatiques et les constantes . . . . . . . . . . . . . . . . . . . . . 327Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

    Calculs de prcision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

    Chapitre 7La manipulation des chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

    Sommaire

  • Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Afficher du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357Manipuler les caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

    Fonctions de gestion des chanes de caractres . . . . . . . . . . . . . . . . . . . . . 363Extraction et substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Fonctions statistiques (longueur et nombre doccurrences) . . . . . . . . . . . 370Fonctions de position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

    Comparaison de chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . 376Comparaison par ordre alphabtique . . . . . . . . . . . . . . . . . . . . . . . . 377Comparaison orthographique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381Comparaison phonique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

    Gestion des caractres spciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Ajout du caractre dchappement . . . . . . . . . . . . . . . . . . . . . . . . . . 385Suppression du caractre dchappement . . . . . . . . . . . . . . . . . . . . . . 386Conversion des caractres en code HTML . . . . . . . . . . . . . . . . . . . . . . 388Conversion dun alphabet un autre . . . . . . . . . . . . . . . . . . . . . . . . . 394

    Manipulation des balises HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395Suppression des espaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397Modification de casse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399

    Insertion de motifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401Fusion et dcoupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

    Autres... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405Somme de contrle et cryptage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

    Expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409Posix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

    Adapter le texte la langue du visiteur . . . . . . . . . . . . . . . . . . . . . . . . . . 431

    Chapitre 8La gestion des dates et des calendriers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

    Les fonctions de date et heure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435Rcuprer une date au "format informatique" . . . . . . . . . . . . . . . . . . . 435Effectuer des oprations sur les dates . . . . . . . . . . . . . . . . . . . . . . . . 436Afficher des dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437Les heures GMT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442Les microsecondes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442Autres fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

    Les dates et calendriers particuliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444Pques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444Conversion dune date dun calendrier lautre . . . . . . . . . . . . . . . . . . 446

    Sommaire

  • Les gestionnaires dvnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

    Chapitre 9La gestion des fichiers et des rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

    Le systme de fichiers POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487Accder au systme de fichiers du serveur . . . . . . . . . . . . . . . . . . . . . . . . 490

    Lire et crire le contenu dun fichier . . . . . . . . . . . . . . . . . . . . . . . . . 490Lister le contenu dun dossier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518Manipulation de fichiers et rpertoires . . . . . . . . . . . . . . . . . . . . . . . 526Upload de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532Encore plus de fonctions daccs au systme de fichiers du serveur . . . . . . 538Exemple dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564Lecture sur un "pipe" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574Compression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575

    Les streams ou les flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593Les gestionnaires disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593Les filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597Contexte de ressource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601Travailler avec les flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607Ajouter des gestionnaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609

    Chapitre 10Lutilisation des bases de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633

    Introduction aux bases de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635Introduction au langage SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636

    Le typage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636Les contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636

    Les relations entre tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636Cls primaires et compteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639

    Le langage SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639Cration/suppression dune base de donnes . . . . . . . . . . . . . . . . . . . 640Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640Cration/suppression dune table . . . . . . . . . . . . . . . . . . . . . . . . . . . 643Ajouter des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645Mettre jour des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646Supprimer des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647Lire des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648Rcuprer des informations sur une base . . . . . . . . . . . . . . . . . . . . . . 651

    Accder une base de donnes via PHP . . . . . . . . . . . . . . . . . . . . . . . . . 652

    Sommaire

  • Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652Couches dabstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654

    Prsentation de lapplication dexemple . . . . . . . . . . . . . . . . . . . . . . . . . 654Le modle de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657Le contrleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677

    Access (MS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

    DB2 (IBM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690

    MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699Exemples dapplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714En savoir plus... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723

    ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731Exemples dapplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745En savoir plus... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754

    Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775Mise profit des requtes prpares . . . . . . . . . . . . . . . . . . . . . . . . . 790Utilisation des objets de grande taille (BLOB, CLOB) . . . . . . . . . . . . . . . 792Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797Exemples dapplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800En savoir plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810

    SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813Exemples dapplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824En savoir plus... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833

    SQL Server (MS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844Exemples dapplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859En savoir plus... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869

    Les couches dabstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871

    Sommaire

  • Pear DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872

    Chapitre 11Les annuaires LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901

    Le schma LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905

    Installation du serveur OpenLDAP . . . . . . . . . . . . . . . . . . . . . . . . . . 905Installation du module LDAP pour PHP . . . . . . . . . . . . . . . . . . . . . . . 907

    Linterrogation de LDAP avec PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908Connexion, authentification et dconnexion sur le serveur LDAP . . . . . . . 908Oprations sur un annuaire LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . 910Recherche dans un annuaire LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . 918Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933Opration sur le Distinguished Name (DN) . . . . . . . . . . . . . . . . . . . . . 934Opration sur les options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936

    Exemple dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938Lauthentification sur lannuaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 939Lajout dune nouvelle entre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944Recherche dans lannuaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947Modification dune entre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949Ralisation dun arbre de navigation LDAP . . . . . . . . . . . . . . . . . . . . . 952

    Chapitre 12La messagerie : envoi et lecture de mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959

    E-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961Envoyer un e-mail simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962Type MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965Envoyer un e-mail au format HTML . . . . . . . . . . . . . . . . . . . . . . . . . . 965Envoyer un e-mail avec fichiers attachs . . . . . . . . . . . . . . . . . . . . . . . 966Envoyer un e-mail multi-part . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968Envoyer un e-mail HTML avec des images . . . . . . . . . . . . . . . . . . . . . . 972

    Accder son compte messagerie IMAP, POP3 ou NNTP . . . . . . . . . . . . . . . . 974Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975Connexion et dconnexion un serveur . . . . . . . . . . . . . . . . . . . . . . . 976Slection dune bote lettres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979Aperu du contenu de la bote lettres . . . . . . . . . . . . . . . . . . . . . . 983Lecture des en-ttes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986Lecture des messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995Recherche et tri des messages . . . . . . . . . . . . . . . . . . . . . . . . . . 1000Modification des drapeaux et suppression des messages . . . . . . . . . . . . 1002Ajout et dplacement de messages . . . . . . . . . . . . . . . . . . . . . . . . 1004

    Sommaire

  • Inscription/dsinscription un serveur de nouvelles . . . . . . . . . . . . 1005Identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006Composition et dcomposition dadresses e-mail . . . . . . . . . . . . . . . . 1006Gnration et envoi de mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008Coder / dcoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009Grer les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011

    Application dexemple : le webmail . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012Administration des botes lettres . . . . . . . . . . . . . . . . . . . . . . . 1017

    Chapitre 13Les images et les animations Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021

    Images (utilisation de la bibliothque GD) . . . . . . . . . . . . . . . . . . . . . . . 1023Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023Dfinition de limage de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026Du texte dans les images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041Dessiner des formes gomtriques . . . . . . . . . . . . . . . . . . . . . . . . . 1053Utiliser les couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065Copier des parties dimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065Taille dune image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072Un exemple : lhistogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073Rcuprer des informations sur un fichier image . . . . . . . . . . . . . . . . 1078Rcuprer des informations EXIF sur un fichier image . . . . . . . . . . . . . 1078

    Les animations Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084

    Chapitre 14La cration de documents PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137

    Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1139Crer la base dun document PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140Prciser les attributs (mots-cls) du document . . . . . . . . . . . . . . . . . . . . 1144Prciser les paramtres de la page . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1144Afficher du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1146Dessiner des formes gomtriques . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152Modifier les paramtres du trac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157Inclure une image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163Ajouter des liens et des annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166Ajouter des fichiers attachs et aperus (thumbnails) . . . . . . . . . . . . . . . . 1170Modifier le systme de coordonnes . . . . . . . . . . . . . . . . . . . . . . . . . . 1171Lire, sauvegarder et restaurer les paramtres courants . . . . . . . . . . . . . . . 1173

    Sommaire

  • Crer un modle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178

    Chapitre 15Lutilisation de XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185

    Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187Prsentation du langage XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187Le format XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187Exemple de document XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189Utilisation des documents XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191

    Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192Les parseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192

    Le parseur SAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192Le parseur DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215Le parseur SimpleXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232

    XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241Les transformations de documents XML . . . . . . . . . . . . . . . . . . . . . . 1243

    Gnration de messages XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254Les messages WDDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254

    Chapitre 16La gestion des protocoles HTTP, FTP, SOAP, etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1263

    Fonctions rseau (de base) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1265Rseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1265

    Adresses IP et DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1265Protocoles et services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269

    Les sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1270FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275

    Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275Les fonctions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1276Exemple dapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281Autres fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1286

    CURL (client URL Library) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1289Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290Exemples dapplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295

    SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303Utiliser les classes PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303Interroger Google via PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304

    Sommaire

  • Chapitre 17Les processus et les identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309

    Excution dun programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313

    Chapitre 18Linteroprabilit avec COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325

    COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327

    Chapitre 19Loptimisation des temps de rponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339

    Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341Environnement de test des solutions "bas niveau" (modules PHP) . . . . . . . . . 1342

    Configuration matrielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342Pages testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1343Instrument de mesure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345Prsentation des mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345

    En labsence de solution doptimisation . . . . . . . . . . . . . . . . . . . . . . . . 1346Mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346

    Avec Zend Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1349Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1349Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1350Mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1354Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357

    Avec Alternative PHP Cache (APC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358Mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362

    Avec PHP Accelerator (PHPA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363Mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1366

    Avec Zend Accelerator (Zend Performance Suite) . . . . . . . . . . . . . . . . . . 1366Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1366Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1367Mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1373Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376

    Sommaire

  • Conclusion sur les solutions "bas niveau" (modules PHP) . . . . . . . . . . . . . . 1376Les solutions "haut niveau" (programmation PHP) . . . . . . . . . . . . . . . . . . 1377Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378

    Chapitre 20Lobfuscation : Distribuer ses scripts sans dvoiler son code . . . . . . . . . . . . . . . . . . . . 1379

    Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1381Avec Zend Encoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1381

    Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388

    Avec ionCube PHP Encoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389

    Avec PHP guardian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389Avec POBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390

    Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392

    Autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392

    Chapitre 21Annexe A : des exemples dapplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393

    Administration de bases de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395Autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1400

    Cration de sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401PHPNuke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401SPIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405Autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407

    Forums de discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407PHPbb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407

    Phorum : un moteur de forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409Autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411

    Annuaires de liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412Netref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412Autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413

    Solutions de travail collaboratif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413Moregroupware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413Autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416

    Sommaire

  • Graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416JPGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416

    Chapitre 22Annexe B : les en-ttes HTTP et les variables externes . . . . . . . . . . . . . . . . . . . . . . . . 1419

    Chapitre 23Annexe C : les erreurs HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425

    Chapitre 24Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429

    Sommaire

  • Laurent GUEDON

    Je ddie ce livre tous mes amis et plus particulirement...

    j Philippe, Amiel (les comptences) et lquipe de Felix ainsi qu la socit Cyberbrain(mon couffin) ;

    j Myriam, si adorable ;

    j mes parents pour leur soutien ;

    j la winwin team, Zou et Syl.

    Damien HEUTE

    Parce quil y a des choses plus faciles crire qu dire, je ddie ce livre :

    j mes parents que jaime et qui mont toujours apport un soutien indfectible ;

    j mes frres et mon neveu qui peut-tre, un jour, sintressera la version 2015 dePHP ;

    j mes collgues qui par leur bonne humeur leur et professionnalisme mont beaucoupappris durant ma premire exprience professionnelle ;

    j mes amis que jai un peu dlaisss pour crire ce livre.

    Thomas HEUTE

    Je ddie lnergie apporte dans ce livre :

    j mes parents et frres que jai peu vus durant la dernire anne ;

    j Mon filleul Adrien, star du chapitre sur GD, et qui a encore le temps avant dapprendre lePHP ;

    j Mes amis de France et des tats-Unis, que jai quelque peu dlaisss (Id like to thank myUS friends and to apologize about having been so busy. By the way, well keep in touch) ;

    j Aux membres actifs de lESIAL Roller Dream Team 1999-2000.

    Pierre-Emmanuel MULLER

    Merci Amiel, Sylviane, Pierre, Rgis Priqueler (http://www.aizenko.com) et Steph Pineau(http://steph.pineau.free.fr/php/).

  • Prface qui sadresse ce livre ?

    Ce livre a t crit avec, en constante toile de fond, les attentes des lecteurs lgard de ce quedoit tre la Bible dun langage de programmation ; savoir quelle doit pouvoir rpondre auxinterrogations du novice comme celles de lutilisateur expriment.

    Une brve histoire du PHP, ainsi quune introduction la philosophie du logiciel libre, vousmontreront quautant PHP aide au dveloppement de lInternet autant Internet contribue lvolution de PHP et offre quantit de ressources qui lui sont lies. Les dbutants ne seront paslaisss sur le bord du chemin ds les premires pages puisque les diffrentes possibilitsdinstallation de PHP font lobjet dun chapitre complet et dtaill o les principaux diteurs dumarch sont galement passs en revue.

    De trs nombreux aspects de PHP sont couverts dans cet ouvrage et la majeure partie desfonctions prsentes sont illustres par des exemples mettant bien en avant leur utilisation etcomportement. Voil pourquoi ce livre est plus quune simple documentation de base. Le PHPest replac dans une optique dapprentissage, ainsi que dans une ide dutilisation au quotidien.Le lecteur apprendra vite produire des formulaires, crer des images, manipuler desfichiers ainsi que des bases de donnes, ou encore envoyer des e-mails. Le novice sera pris parla main pour quaucune zone dombre ne puisse subsister.

    Mme si la prsentation de la programmation procdurale nest pas dlaisse, ce qui peut vouspermettre de tirer partie de ce livre si vous restez attachs la version 4 de PHP, laprogrammation oriente objet est bien videmment prsente minutieusement afin de tirerpleinement partie de PHP5.

    Une fois acquis les premiers rudiments, lutilisateur devenu initi, trouvera dans ce livre de quoialler plus avant dans sa matrise du PHP. Il pourra apprendre utiliser des bases de donnesprofessionnelles ainsi que les annuaires LDAP. Il pourra manipuler les documents XML, crerdes animations flash ou des fichiers PDF, accder aux fonctionnalits rseau dont SOAP voireutiliser PHP en conjonction avec COM. Enfin, pour une utilisation vritablementprofessionnelle, il aura tout intrt consulter les comparatifs de solutions doptimisation etdobfuscation du code.

    Comme le dmontrent les tmoignages dutilisateurs qui ont fait le choix du langage PHP, bienquhistoriquement cr pour les besoins dune page "perso", PHP a dsormais sa place dans lemonde de lentreprise.

    Les auteursLes quatre auteurs de cette Bible disposent tous dune exprience diffrente de PHP. Venantdhorizons divers, ils ont tenu mettre en commun leurs approches pour balayer le maximumdaspects relatifs au PHP.

    21

  • Damien HEUTEN en 1972, ingnieur E.N.S.P.S. (cole nationale suprieure de physique de Strasbourg),spcialit traitement dimages, Damien a travaill trois ans et demi en tant quingnieur tudeet dveloppement pour un grand groupe europen daronautique et de dfense. Il y a mis enuvre les technos C, C++/CORBA, Java, et, dans une moindre mesure, des technologiesrelatives lInternet et aux bases de donnes professionnelles. Il a ensuite pass dix mois en tantquingnieur tude et dveloppement pour une start-up spcialise dans laide la navigationvia Internet sur des supports "sans fil", o il a mis enuvre des technologies Java et JSP/Servlet.Maintenant dans un grand groupe franais acteur majeur de la tlphonie mobile, de labiomtrie et de la dfense, il conoit et dveloppe, dans le cadre de gros projets, desapplications web bases sur le langage Java.

    Il pratique le PHP titre personnel, en particulier pour les sites http://www.ootoogo.com ethttp://www.toutestfacile.com

    Il aime le VTT et le cyclisme sur route, il fait un peu de photo et beaucoup dinformatique.

    Thomas HEUTEN en 1977, il a suivi ses tudes lESIAL (cole suprieure dinformatique et applications deLorraine) et possde de nombreuses comptences dans le domaine informatique. Thomasconnat bien les systmes Windows, Linux ou UNIX. Les langages dans lesquels il est le plus laise sont Java et PHP. Il matrise galement de nombreuses bases de donnes, ainsi que desoutils de conception de logiciels (UML ou MERISE).

    Il a travaill trois ans au National Institute of Standards and Technology (USA), o il a effectudes recherches sur la scurit et les PDA aprs avoir travaill sur les systmes denregistrementdobjets par XML (ebXML).

    Il est galement lorigine du site http://www.toutestfacile.com, site vocation denseignement duPHP, du SQL et du XML.

    Il sinvestit dans le dveloppement Open Source avec "Nukes the JBoss Portal" en Java/J2ee.

    Il aime la batterie, la guitare et la photographie mais surtout linformatique.

    Laurent GUEDONN en mai 1975, ce qui, pour lui, est dj trs (trop) loin.

    Aprs une formation E.E.A (lectronique), Laurent, vouant une grande passion audveloppement Internet, a rejoint en 1999 une SSII spcialise dans le dveloppementdapplications et de sites Internet. Laurent est dveloppeur PHP depuis PHP 2, ses premierspas ayant t effectus sur lex-hbergeur AlternB. Dveloppeur indpendant depuisseptembre 2002, il est charg denseignement la facult de Rennes.

    Il pratique (plutt mal) la guitare, fait du roller et se fait de petits trous dans la peau avec despiques en mtal (il appelle a le piercing). Mais, surtout, il ne se spare jamais de son Psion quilui permet de dvelopper pendant ses dplacements.

    Prface

    22

  • Pierre-Emmanuel MullerJournaliste spcialis dans linternet et les nouvelles technologies, il a un intrt marqu pourtout ce qui touche la protection de la vie prive ainsi quaux logiciels libres. Il a particip diverses traductions dapplications libres. Il est lauteur ou coauteur de plusieurs ouvrages devulgarisation informatique (Scurisez votre PC, Montez votre serveur de A Z, Utiliser les logicielslibres, etc.).

    Prface

    23

  • Chapitre 1

    Introduction1.1 quoi sert PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    1.2 Les version 1 5 de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    1.3 La communaut du libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    1.4 PHP face ses concurrents (ASP, JSP, etc.) . . . . . . . . . . . . . . . . . . . . . . . . 40

    1.5 Pourquoi ont-ils choisi PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

  • 1.1. quoi sert PHP ?

    Prsentation, rle et fonctionnement dun langage de scriptAvant de prsenter le langage PHP, il est utile de situer brivement sa place sur linternet.Comment, en effet, bien comprendre lutilit dun langage de script si la notion de "serveur" estencore floue ?

    LInternet est un rseau de rseaux, constitu dordinateurs connects entre eux. Sa structureest maille, non pyramidale. Il y a bien des chelons, mais les chelons les plus levs sont, enfait, assez proches de la base, et sont, surtout, en trs grand nombre. Ces chelons sontinterchangeables. Quand votre chelon suprieur est absent, en panne, ou disparu, vous pouvezutiliser un autre chelon de mme type. En bref, deux machines sont gnralementinterchangeables.

    Il est ainsi trs difficile de "diriger" lInternet. Comme tout bon processus de communication,Internet dispose dun langage (en fait de plusieurs langages) qui dpend du service que vousdsirez utiliser (web, mail, ftp, etc.). Quel que soit le service en question, ce langage estcommun toutes les machines informatiques, et est indiffrent aux plateformes. Les donnesprovenant dInternet sont donc, moyennant parfois quelques retraitements, rutilisables partout ordinateur. Ainsi, un site web est construit indpendamment de la plateforme sur laquelleil est conu. Ce sont les logiciels qui sadaptent aux machines. Il existe un navigateur web(Netscape) pour PC et une autre version pour Mac. Les donnes quils exploitent, en revanche,sont indpendantes des systmes dexploitation (Windows, MacOs, Linux, etc.). Lescomposantes les plus connues de lInternet sont le Web (World Wide Web) ou le courrierlectronique (e-mail).

    Concentrons-nous sur le Web, car cest de cela quil est question avec PHP. Admettons quevous dsirez consulter le site web du moteur de recherche Google. Vous donnez ladressehttp://www.google.com votre navigateur, vous lancez la recherche, et, quelques secondes plus tard,la page daccueil du site saffiche sur votre cran. En fait, derrire cette action se cache toute uneinteraction client-serveur, primordiale intgrer pour bien saisir le fonctionnement de PHP.Votre navigateur, le client, interroge un serveur, en lui demandant la page daccueil dun site.Le serveur est une machine qui hberge le site web en question. Cette machine doit tre, enprincipe, connecte en permanence au rseau. Concrtement, ce sont les disques durs de cettemachine qui stockent les pages HTML ou PHP qui seront demandes par les internautes. Pourque le serveur soit en mesure de vous rpondre, il faut que certains programmes et servicessoient prsents et fonctionnels en son sein. Dans le cas dun site web, il faut que le serveurdispose dun serveur web, cest--dire dun programme permettant linterprtation et la diffu-sion des pages demandes par les internautes. Votre navigateur demande la page, le serveurwebreoit et comprend votre requte, il recherche la page en question et, si elle est disponible, vousla retourne. En fait, il ne vous retourne que le code source de la page, en gnral duHTML,maisce peut tre une image ou une animation. La mise en forme, la construction et laffichage de lapage incombent votre navigateur.

    PHP est un langage de script HTML, cest--dire quil fonctionne en relation avec le langageHTML (HyperText Markup Language). Il fonctionne du ct du serveur, et non pas du ct duclient, et permet de gnrer des pages web " la vole". Concrtement, un script PHP est intgrau code source dune page HTML. Lorsque la page est appele, le script PHP est interprt, etle tout est livr au serveur web qui, au final, rpond au navigateur de linternaute. Le surfeurobtient une page HTML tout ce quil y a de plus classique, la diffrence que cette page

    27

    quoi sert PHP ?1.Introduction

  • nexistait pas en tant que telle sur le serveur web. On dit alors que la page a t cre " lavole", ou dynamiquement.

    Plus concrtement, prenons une page HTML toute simple dont voici le code source :

    Je teste le langage PHP

    Voici un script PHP sans prtention :

    Pour intgrer ce script la page HTML, il suffit, ici, dinsrer le code entre les balises et de la page. Ce qui nous donne alors ceci :

    Je teste le langage PHP

    Cest aussi simple que a. Comme vous pouvez le constater, le script PHP est encadr par unebalise de dbut et une de fin ( savoir ). Ce sont des informations qui, la lecturede la page, indiquent au serveur quil doit interprter ces informations comme de PHP, et nonplus comme du HTML.

    Un script est dfini comme suit par le jargon Linux France : "Une suite dinstructions simples,peu structures, permettant dautomatiser certaines tches [...]". Dit ainsi, cest assez cinglant.En clair, un script PHP vous permet non seulement de gnrer du texte ou du code HTML,mais galement denvoyer un courriel, daccder une base de donnes, de lancer unprogramme sur le serveur, etc. Il est donc ainsi possible de compter le nombre de visiteurs survotre page, de grer un livre dor ou bien mme de raliser des applications web part entire,comme des gestionnaires de contenus (PHPNuke, DaCode, SPIP, etc.) ou des outils de travailcollaboratifs (PHPGroupware, par exemple).

    En fait, PHP possde les mmes fonctionnalits que les autres langages de script. Son grosatout rside dans son fonctionnement rsolument tourn vers le Web. En natif, ce sont plus devingt bases de donnes qui sont supportes par PHP, sans que lutilisateur ait faire quoi quece soit. Tous les grands protocoles de linternet fonctionnent, eux aussi, sans autre forme deprocs avec PHP : SMTP, POP3, IMAP, FTP, SNMP, etc.

    Chapitre 1 Introduction

    28

    1.Introduction

  • 1.2. Les version 1 5 de PHP

    Rasmus LerdorfChaque grand projet libre a un pre ou un leader charismatique. PHP ne droge pas la rgle.Qui plus est, lhistoire de PHP facilite les choses, ses premiers pas tant tout ce quil y a de plussimple narrer. Les premires esquisses de PHP sont le fait dun seul homme : RasmusLerdorf. Sur son site personnel, Rasmus Lerdorf reste assez discret. Les rares lments que lonpeut glaner sur son parcours personnel se limitent des expriences professionnelles ou quelques hauts faits de programmation. On en apprend mme plus en suivant lhistoire dePHP, intimement lie celle de son crateur, tout au moins dans les premires annes. RasmusLerdorf est n en 1969 sur lle de Greenland. On comprend que le petit Rasmus ait prfrlinformatique lagriculture, tant lle de Greenland est peu clmente : les terres arables, lesforts et les pturages permanents reprsentent peine 1 % de la superficie totale de lle. Llede Greenland est tout de mme dune superficie trois fois suprieure celle du Texas(2 170 000 km_) pour une population infrieure celle de lle de Guernesey qui ne fait que 78km_ (56 300 personnes).

    Rasmus Lerdorf ne se dfinit pas comme un programmeur, mme si le fait quil soit capable defaire fonctionner PHP sur son magntoscope conduit le spectateur penser le contraire. Il napas de diplme dinformaticien, mais une formation dingnieur. Il a travaill pour des socitscomme Bell, IBM ou Linux Care. Selon une tude mene grands coups de scripts Perl par PerAbrahamsen, Rasmus Lerdorf est lun des Danois les plus clbres. Il arrive mme, dans leclassement, avant le penseur Soren Kierkegaard.

    Signalons enfin que Rasmus Lerdorf, en bon dveloppeur du logiciel libre, nest pas dnu desens de lhumour. Le petit dernier des Lerdorf a pour nom Carl Alexander Lerdorf. Sur le sitede la famille Lerdorf, son nom se lit : Carl AlexandeR LerdorfRcursif, quand tu nous tiens !

    Quelques sites (en anglais)Site officiel de la famille Lerdorf (avec les photos du petit Carl Alexander Lerdorf) :http://www.lerdorf.comLes Danois clbres :http://www.dina.kvl.dk/~abraham/fame/fame.html

    Figure 1.1 :Rasmus Lerdorf

    Les version 1 5 de PHP

    29

    1.Introduction

  • Naissance et volution de PHP

    Naissance et premire versionLa premire version de PHP nen tait pas une. Ce ne furent que quelques outils dveloppspar Rasmus Lerdorf pour les besoins de son site personnel. Dans le courant de lanne 1993,M. Lerdorf avait commenc dvelopper des scripts en langage C et en Perl. partir de l a putre constitue, en septembre 1993, une premire librairie. Lass de devoir rcrire encore ettoujours les mmes portions de code, M. Lerdorf eut lide de sparer sa logique deprogrammation de celle du HTML, afin de pouvoir rutiliser plus facilement certaines portionsde code.

    Pour quune premire version de PHP comme langage de script voie le jour, il ne manquait plus la librairie quun interprteur capable danalyser le code HTML, pour y reprer des balisesparticulires et appeler les fonctions qui y sont lies. Cela fut fait en novembre 1993, date laquelle M. Lerdorf situe la naissance de la toute premire version de PHP. La premiremouture du langage navait donc pas de trs grandes ambitions. PHP se limite alors uninterprteur qui analyse une page HTML, en ressort des balises (inspires du SGML), etappelle les fonctions correspondantes ces balises. Tout cela dans quel but ? Afin de compteret denregistrer le nombre de visiteurs consultant un curriculum vitae sur son site personnel.Rasmus Lerdorf rsume ses motivations une lassitude face Perl, jug comme tant trop lentet dot dun analyseur trop restrictif.

    Cette premire version neut quun succs trs limit, et pour cause elle ne fut jamais publie.Il faut attendre fvrier 1994 pour quune premire version de PHP soit enfin diffuse.

    Interviews de Rasmus LerdorfInterview de Rasmus Lerdorf dans le Journal du Net :http://developpeur.journaldunet.com/itws/it_phpnexen_rasdorf.shtmlInterview de Rasmus Lerdorf pour OReilly (en anglais) :http://web.oreilly.com/news/lerdorf_0200.html

    PHP 2 et louverture sur le mondeLa premire utilisation plus large de PHP remonte au site http://www.io.org. Rasmus Lerdorfrutilisa son langage de script pour installer divers petits outils en ligne (un compteur devisiteurs, laffichage de la dernire personne connecte, etc.). Alors, le succs de PHP futimmdiat. Dautres utilisateurs du site voulurent utiliser PHP, et les scripts poussrent dans leHTML comme les champignons dans un sous-bois humide. tant donn que linterprteurvoqu plus haut tait lui-mme un CGI, les administrateurs du site reprrent rapidement lechangement. PHP se rvlait fort gourmand en ressources. Pour remdier cela et viter unemort certaine du langage,Rasmus Lerdorf se pencha alors sur le serveur web pour y inclure PHPcomme module interne plutt que de le conserver en module externe (CGI), beaucoup pluslourd. Le serveur utilis tait HTTPD NCSA, de lUniversit de lIllinois. Une fois PHP ajoutau serveur, M. Lerdorf convainquit tout de mme les administrateurs de passer sous Apache,serveur web beaucoup plus souple utiliser et programmer.

    Chapitre 1 Introduction

    30

    1.Introduction

  • Cest cette poque queM. Lerdorf obtint un emploi luniversit de Toronto. Sa mission taitde mettre en place un systme de connexion lInternet gr depuis une interface web. Le toutfaisait intervenir une base de donnes des tudiants, des serveurs, des terminaux Cisco ainsi quequelques autres composants. En recherchant un outil utilisable dans la mise en place de cettearchitecture, Rasmus Lerdorf se rendit compte quil ny avait rien qui lui plaisait rellement. Ildcida donc de rcrire linterprteur de PHP et ses outils connexes, pour les rendre plusfacilement multi-usages et gnralistes. PHP devait tre capable de dialoguer avec des bases dedonnes ou dautres sources extrieures (comme, par exemple, des formulaires HTML).

    Ce sera nouveau, pour Rasmus Lerdorf, loccasion dutiliser PHP et de le faire progresser.Anciennement Personal Home Page, PHP sappelle alors PHP/FI (PHP/Form Interpreter,interprteur de formulaires), du fait des nouveaux outils ajouts parM. Lerdorf pour interfacerPHP avec des bases de donnes. La syntaxe de PHP/FI reste simple, encore un peu incohrenteet assez proche du Perl.

    PHP/FI connat alors un trs large succs. De nombreux dveloppeurs utilisent PHP, et non passeulement pour interroger des bases de donnes. PHP/FI sert dj crer des pages web aucontenu dynamique, ce qui sera lune des applications les plus populaires du langage par lasuite. Il prsente dj certaines des principales fonctionnalits de PHP.

    En 1997, ce sont dj plus de 50 000 sites qui utilisent PHP.

    PHP 3Publie en juin 1998, aprs neuf mois de tests, la troisime version du dsormais officiellementnomm PHP (PHP : Hypertext Preprocessor, le premier P faisant rfrence PHP lui-mme.Rcursif quand tu nous tiens...) fait un grand bond en avant. La sortie de cette nouvelle versioncorrespond galement une solide refonte du moteur de PHP. Deux dveloppeurs, ZeevSuraski et Andi Gutmans jugeaient que PHP/FI ntait pas assez performant pour leursapplications de commerce en ligne, et dcidrent donc de le rcrire. PHP 3 fut annonccomme le successeur officiel de PHP/FI.

    Lune des principales nouveauts de PHP 3 principale en tout cas au regard de sondveloppement fut une API (Application Programming Interface, interface deprogrammation dapplication) qui permit de nombreux dveloppeurs de participer audveloppement du langage. De plus, PHP supportait dsormais la syntaxe objet, sa syntaxepropre devenant, elle, plus cohrente et solide.

    La version finale de PHP 3 fonctionnait sur de nombreuses plateformes, avec de nombreuxserveurs web et bases de donnes. Les protocoles SNMP ou IMAP taient alors supportsmoyennant une compilation approprie. PHP pouvait tre utilis en mode CGI avec la plupartdes serveurs HTTP, ou bien tre charg en module, comme par exemple avec Apache.

    De nombreuses fonctionnalits avaient t ajoutes PHP 3, mais, en plus, cette sortieconcidait avec lattente de nombreux nouveaux webmestres qui avaient besoin dun outilsimple pour ajouter une touche de dynamisme leurs sites web. La fin des annes 1990 fut, eneffet, une priode faste pour le Web, port dans sa croissance par larrive de lInternet dans legrand public. PHP permettait alors de mettre en place trs facilement une solution decommerce en ligne, des albums photo, des systmes de gestion de contenus, etc. Sa facilitdaccs et dusage, ainsi quune gamme doutils rsolument tourns vers le Web, faisaient de celangage la solution idale pour de nombreux webmestres.

    la fin de lanne 1998, plus dun million de serveurs web devaient utiliser PHP 3. Le langagede script avait conquis plusieurs dizaines de milliers dutilisateurs.

    Les version 1 5 de PHP

    31

    1.Introduction

  • PHP 4Fidle la toute jeune tradition, PHP 4 allait une nouvelle fois entraner une rcriturecomplte de son moteur. Ds lhiver 1998, Andi Gutmans et Zeev Suraski se penchrent sur lemoteur interne du langage pour le reprendre de fond en comble. Leur objectif tait de rendrePHP encore plus performant (ce que lon comprend aisment), et de rendre le code encore plusmodulaire. Il fallait galement permettre au PHP dtre plus laise avec des applicationscomplexes. PHP 3 posait problme face ces applications complexes. Sa syntaxe permettaitleur excution, mais le moteur du langage navait pas t conu pour les faire fonctionnerefficacement. Lcriture dun nouveau moteur semblait alors ncessaire pour permettre auPHP de passer une nouvelle tape de sa croissance.

    Ce nouveau moteur devait porter le nom de ses deux crateurs : le Zend Engine, combinaisonde ZEev et ANDi. Une premire version de PHP dot de ce nouveau moteur sortit dans lecourant de lanne 1999. La publication officielle de la version finale fut annonce en mai 2000,six ans aprs le premier PHP. PHP 4 assurait une compatibilit ascendante par rapport PHP 3, et la migration de PHP 3 PHP 4 fut encore plus souple que celle de la version 2 laversion 3.

    Outre un cur neuf, PHP disposait dune plthore de nouveaux membres. Dans sa quatrimeversion, PHP supporte quasiment tous les serveurs web du march, les bases de donnes lesplus rpandues, plusieurs nouvelles structures de langage ou encore la bufferisation de sortie.On compte galement des amliorations en matire de scurit. Larchitecture de PHP 4 estencore plus ouverte et volutive que celle de PHP 3. On remarque notamment la cration duneinterface ISAPI (Internet Server Application Programming Interface, outil de spcification desDLL pouvant tre utilis par les serveurs web de Microsoft). PHP 4 permet galementdinstancier et de manipuler des classes Java comme si elles taient de simples classes PHP.PHP peut aussi excuter des servlets. Autre amlioration majeure de PHP 4 : lintroduction dessessions en mode natif. Limpossibilit pour PHP 3 de grer les sessions constituait une grosselacune pour un langage tout entier tourn vers le Web. Cette faiblesse ne jouait pas en faveurde PHP, tout particulirement face lASP qui, lui, savait dj grer les sessions. La lacune dePHP 3 pouvait certes tre comble via des solutions comme PHPLib, mais linclusion en modenatif dans PHP 4 rglait dfinitivement la question. PHP 4 marque galement lentre dulangage dans le monde des socits commerciales. Les deux pres fondateurs de PHP 3, ZeevSuraski et Andi Gutmans, crrent la socit Zend pour distribuer et vendre des produitsgravitant autour de PHP. Si le Zend Engine reste libre, bien que sous une licence assezcritique jusque dans sa seconde version, certains produits commercialiss par Zend sont deslogiciels propritaires. Signe vident dune maturit du langage, PHP devient alors le supportdun commerce tourn vers les grands comptes de lInternet. Belle volution pour ce qui ntait,au dpart, quune petite collection de scripts Perl destins compter des visiteurs...

    La communaut PHP ne compte plus seulement des dveloppeurs ou des webmestres.Dsormais, de nombreux internautes participent la documentation de PHP, sa traductionou son annotation. En France, par exemple, la socit Nexen hberge la documentationofficielle de PHP en franais, dont elle a produit une version annote. Le projet Pear regroupe,lui aussi, de nombreux participants, qui ne sont pas directement impliqus dans ledveloppement de PHP.

    On compte aujourdhui plusieurs millions de sites web qui utilisent PHP. En se basant sur cecomptage des noms de domaines, on peut dire que cela reprsente 20 % de lInternet. Lesdveloppeurs, eux, sont des centaines de milliers lutiliser. Le site Security Space tient jourune liste des modules Apache les plus utiliss. En juin 1998, PHP tait prsent sur 8 % des sitesaudits par Security Space. En mars 2002, presque 45 % des sites audits avaient install le

    Chapitre 1 Introduction

    32

    1.Introduction

  • module PHP pour Apache. Perl, lui, tait, la mme date, prsent sur 20 % de ces sites(rappelons que Perl date de 1987 et PHP de 1994).

    PHP 5La tant attendue version 5 de PHP est sortie le 13 juillet 2004. Elle apporte de trs nombreusesnouveauts tout en conservant une large compatibilit avec PHP4. Si la grande nouveaut de laversion 5 reste le nouveau modle orient objet, les dveloppeurs de PHP nont pas oublilhritage des 4 prcdentes versions qui ont permis de trs nombreux dveloppeurs de faireleurs premiers pas dans le monde du script pour le web. La plupart des scripts crits pour PHP4devraient fonctionner sans modifications avec PHP5. Il existe toutefois quelques diffrencesdont la liste est disponible sur le site officiel du projet PHP.

    Incompatibilits entre PHP4 et PHP5Mme si vos scripts crits pour PHP4 ont de trs larges chances dtre compatiblesavec PHP5, certaines incompatibilits ou modifications sont connues et listes. Lesite officiel PHP en dnombre une dizaine. Vous les trouverez cette adresse :http://www.php.net/manual/fr/migration5.incompatible.php

    Lvolution de PHPPHP, et avec lui toute la communaut de dveloppeurs, doit faire face des questions indites.Sa taille provoque des soucis dchelle, dj rencontrs par dautres projets (comme Linux, parexemple). Jusqu prsent, les rponses apportes par la communaut aux problmes apparusfurent satisfaisantes, tout au moins assurrent-elles sa survie et sa croissance, sans nuire laqualit du langage. On peut citer, titre dexemple, la mise en place dune quipe dassurancequalit durant lt 2000 pour faire face aux nombreuses critiques suscites par la pitre qualitdes premires versions de PHP 3. Le langage avait, en effet, t test sur trop peu deplates-formes diffrentes. Dsormais, une quipe complte de dveloppeurs a pour objectifprincipal de chasser le bug au sein du projet PHP.

    Figure 1.2 : Le nombre de sites utilisant PHP crot de jour en jour

    Les version 1 5 de PHP

    33

    1.Introduction

  • Alors que PHP est un langage de script n du Web pour le Web, lon voit mme natre desprojets impliquant PHP, qui nont plus rien voir avec les objectifs premiers du langage.PHPGtk est ainsi une solution permettant de dvelopper des applications en PHP partirdune interface graphique ct client.

    De mme, lentre en jeu de socits commerciales a amen des questionnements soulevs pardes acteurs du monde du libre, comme la FSF (cf. problme de la licence du moteur Zend).Encore une fois, la communaut PHP a su faire preuve de beaucoup de pragmatisme dans sesrponses. Rsultat des pressions de la FSF, Zend a chang la licence de son moteur. PHP 4reste, pour sa part, sous une licence Apache, juge plus souple pour les dveloppeurs. Et, quandon demande aux dveloppeurs de PHP comment ils prennent les critiques que lon peut leuradresser parce que PHP 4 nest pas GPL, ils vous rpondent avec des frites.

    Si Rasmus Lerdorf a pu tre, un moment, une figure de proue de PHP, et quil resteaujourdhui encore son reprsentant le plus mdiatique, on peut tout de mme remarquer quela communaut PHP ne bnficie pas dune structure centralisatrice qui ferait linterface entrele langage et les entreprises ou les institutions. Le logiciel libre a lOpen Source Initiative ou laFSF, un projet comme Kde dispose de toute une infrastructure qui assure sa promotion ou sareprsentation, Linux a Linus Torvalds. Vu de lextrieur, le monde de PHP parat encore flou.

    PHPLa socit Zend, ditrice du Zend Engine (en anglais) :http://www.zend.comLa socit Nexen :http://www.nexen.netNombre de sites utilisant PHP (en anglais) :http://www.php.net/usage.phpModules Apache les plus utiliss (en anglais) :http://www.securityspace.com/s_survey/data/man.200203/apachemods.htmlDes projets attachs au PHP :http://php3.de/manual/fr/html/history.php.related.htmlInterview du crateur de PHPGtk (en anglais) :http://beta.usephp.net/article.php3?id_article=3p

    La cration de la communautSi PHP a pu crotre et prosprer jusqu devenir lun des langages de script les plus utiliss, cesten grande partie grce une communaut de dveloppeurs qui, ds la version 3, fut la chevilleouvrire de ses amliorations. PHP/FI, seconde version du langage, reste luvre dun seulhomme, Rasmus Lerdorf, pre de PHP. partir de la version 3, Rasmus Lerdorf nest plus seul la tte de PHP. Zeev Suraski et Andi Gutmans prirent en main, par deux fois, la refontecomplte dumoteur de PHP. Cette ouverture de PHP est due une interface APImise en placetrs tt, mais, surtout, la volont de son crateur de partager son travail avec dautresdveloppeurs. Rasmus Lerdorf le dit lui-mme : il a toujours appris en regardant le codedautres programmeurs. Ne pas faire profiter, en retour, la communaut de son travail ne lui amme pas travers lesprit.

    Chapitre 1 Introduction

    34

    1.Introduction

  • Comment cette communaut est-elle ne ? Dans une interview, Rasmus Lerdorf situe sa datede naissance au jour o, alors employ par luniversit de Toronto, il avait mis en ligne son codesource disposition sur une page web. Cela dans loptique vidente que dautres puissent enprofiter. Il navait alors aucune ide de qui utilisait PHP de par le monde, ni pour quellesapplications. Un beau jour, il reut un courriel dun utilisateur japonais, qui lui faisait parvenirun patch. Le patch tait tout fait fonctionnel et pertinent. Il rsolvait un problme auquelRasmus Lerdorf navait pas encore eu affaire, mais qui allait se poser inluctablement. PHPbnficiait dune aide extrieure, la communaut tait ne ; elle compte aujourdhui plus de300 dveloppeurs.

    La communaut PHPRasmus Lerdorf raconte la naissance de la communaut :http://developpeur.journaldunet.com/itws/it_phpnexen_rasdorf.shtml

    1.3. La communaut du librePourquoi prsenter le monde du logiciel libre dans un livre traitant de PHP ? Simplement parceque, sans cette communaut, PHP ne serait pas ce quil est aujourdhui. Si la marque du mondedu libre nest pas particulirement visible sur le langage lui-mme, sa philosophie et son modede dveloppement ont eu, et ont toujours, une influence notable sur le langage PHP et sacroissance. Il suffit de voir le rle prpondrant que joue le triptyque Apache-MySQL-PHPdans le monde du Web face des solutions comme IIS-ASP-Access. PHP est indissociable dumonde du libre. Cette partie na pas pour objectif de faire lapologie du logiciel libre, ni mmede faire un comparatif entre code source ouvert ou code source ferm ; tout comme le souligneLinus Torvalds lui-mme, les deux existent et cest tant mieux. Il nous a pourtant sembl utilede prsenter le monde du libre, pour permettre celui qui dcouvre PHP, dune part decomprendre le contexte de sa croissance et de son volution, et dautre part de savoir vivre dansle monde de PHP. Celui qui ne sait pas que les dveloppeurs qui travaillent avec PHPdistribuent largement leurs sources et discutent massivement en ligne de lvolution du langageet des questions techniques qui sy rattachent sera vite perdu et passera ct de lun desprincipaux atouts de PHP : sa communaut.

    HistoriqueLe monde du logiciel libre plonge ses racines dans lhistoire des hackers (au sens premier duterme). Toute la culture du logiciel libre et son folklore doivent beaucoup aux pionniers delinformatique, ces "vrais programmeurs" : les hackers (selon la dfinition dEric S. Raymond).Pour une histoire complte et documente de cette culture, on se reportera Une brve histoiredes hackers, par M. Eric S. Raymond. Disons simplement que les logiciels libres ne sont pas nsavec Linux. Leur histoire est bien plus riche et complexe.

    Cest dans lun des plus prestigieux laboratoires dinformatique du monde, celui dintelligenceartificielle du MIT (Institut de technologie du Massachusetts) que sest cristallise loppositionentre logiciels libres et logiciels propritaires. Chef de file du laboratoire, et froce opposant la commercialisation des techniques mises au point dans ce laboratoire, Richard M. Stallmancra, en 1984, la Fondation du logiciel libre (Free Software Foundation, FSF). Hacker au sens

    La communaut du libre

    35

    1.Introduction

  • propre du terme, il dveloppa alors des logiciels libres, dont le clbre diteur Emacs. M.Stallman entrepris alors de recrer un clone complet libre du systme dexploitationpropritaire UNIX. Cest ainsi que naquit le projet GNU (GNU is not UNIX. Dcidment,acronyme rcursif quand tu nous tiens). La FSF avait pour objectif de soutenir etdaccompagner des projets libres. Sa cration formalisait les thses et ides des dfenseurs dulogiciel libre. Fortement imprgne de la culture de lchange et de la transmission libre dessavoirs des milieux universitaire et scientifique, la FSF estime que "tout comme les ides, leslogiciels ne sont pas tangibles et peuvent tre copis sans perte. Les transmettre est la base dunprocessus dvolution qui alimente le dveloppement des rflexions." (site de la FSF Europe,Quest-ce quun logiciel libre ?). Pour tre qualifi de libre, un logiciel doit, selon la FSF,rpondre quatre critres de libert. Tout dabord, un programme doit pouvoir tre excutpour nimporte quel usage. Ensuite, un utilisateur doit pouvoir tudier le fonctionnement duprogramme et ladapter ses besoins. Il doit galement tre possible de redistribuer des copieset, enfin, damliorer le programme en rendant publiques les modifications pour quelensemble de la communaut en bnficie.

    Pour assurer ces liberts aux logiciels libres, M. Stallman tablit la GPL : GNU General PublicLicense.

    La machine en marcheLes logiciels de la FSF ne sont pas les seuls produits libres. De trs nombreux logiciels libressont en rapport avec linternet. Sils ny sont pas directement lis, cest leur dveloppement quien a profit.

    On peut citer Sendmail, dvelopp en 1981 par Eric Allman. Aujourdhui encore distribugratuitement par la socit Sendmail Inc., Sendmail est lagent de transport de mails le plusutilis sur Internet. Il dtient plus de 75 % des parts de march.

    Autre figure historique et emblmatique du monde du libre : Perl. Perl signifie PraticalExtraction and Report Language (langage pratique dextraction et de rapport). Cest unlangage de programmation trs largement utilis sur lInternet. Il sert principalement auxadministrateurs de systmes et de rseaux. Il sert galement dans le dveloppement de CGI.On estime quune centaine de programmeurs participe au dveloppement de Perl. Lesprogrammeurs utilisant Perl seraient 500 000 et les utilisateurs, eux, plusieurs millions. En sebasant sur les ventes douvrages ddis chaque langage, les ditions OReilly estiment quePerl est aussi souvent utilis que Java.

    Apache est un projet libre denvergure ; peut-tre celui qui a dmontr le premier quunlogiciel libre pouvait faire jeu gal avec les grandes entreprises de dveloppement de logiciels.Il dtient aujourdhui la plus importante part de march pour les serveurs web (sourceNetcraft), et cela face des acteurs aussi puissants que Microsoft ou Netscape. En juin 1998, legant de linformatique IBM annonait soutenir officiellement le groupe Apache. Ce choixdApache par IBM fut une tape importante dans lhistoire des logiciels libres. Les impratifscommerciaux et conomiques qui prsident aux dcisions dIBM donnaient ce soutien Apache une valeur toute particulire. Un logiciel libre pouvait servir les intrts du mondecommercial sans se galvauder ni perdre ses ambitions.

    Lhistoire de la FSF nest pas jonche seulement de russites. Lun des principaux checs de laFSF fut de mettre beaucoup trop de temps pour fournir un noyau son systme dexploitation(GNU). Cependant, lune de ses principales russites fut de fournir une trousse outils celuiqui allait dvelopper le noyau libre le plus connu : Linus Torvalds. Cest en effet grce aux

    Chapitre 1 Introduction

    36

    1.Introduction

  • logiciels de la FSF que le jeune tudiant de luniversit dHelsinki a pu dvelopper son propreUNIX libre, Linux. Linus Torvalds voulait dvelopper un UNIX pour son ordinateurpersonnel. Aprs avoir tabli les premiers lments de son systme dexploitation, il mitrapidement le code source la disposition des internautes du monde entier. Cest l que rsidelune des particularits les plus importantes de Linux. Il est dvelopp et maintenu par desprogrammeurs du monde entier, grce lInternet. De grands acteurs de lindustrieinformatique font dsormais confiance Linux (IBM, Sun, Dell, HP, etc.).

    Cathdrale et bazarAyant observ le dveloppement de Linux, Eric S. Raymond a voulu thoriser ce nouveaumodle de dveloppement. Schmatiquement, il oppose deux modles : la cathdrale et lebazar. Le modle en cathdrale est un modle classique. Cest celui des entreprises etadministrations classiques : centralis, trs hirarchis, il met beaucoup de temps ragir, et lesdcisions sont soumises de multiples validations. Dans le modle bazar, tout est beaucoupplus horizontal, mouvant et flexible. Un modle ouvert et collaboratif comme le bazar permetune volution rapide et pertinente. Chacun est libre de soumettre un correctif ou uneamlioration, ce qui vite de brider les initiatives.

    La scission : lOpen SourceRichard Stallman na jamais fait lunanimit dans le monde du logiciel libre. Son dogmatisme etses prises de position fermes taient vues par beaucoup comme des freins au dveloppementplus rapide du monde du libre, tout particulirement en direction des entreprises. Mme si lalicence GPL ninterdit pas du tout la commercialisation dun logiciel libre, la FSF vhiculait uneimage hostile au monde du commerce. Daucuns pensaient que les ides dveloppes par laFSF nuiraient plus la croissance de la communaut du libre quelles ne la serviraient. De cefait, des programmeurs et dautres acteurs du logiciel libre dcidrent de substituer le termeOpen Source celui de Free Software, le terme "free" tant jug trop ambigu (en anglais, ildsigne aussi bien ce qui est gratuit que ce qui est libre). Afin de ne plus effrayer le monde delentreprise, le mouvement Open Source vit donc le jour. On retrouvait sa tte certains desplus prestigieux acteurs du monde du libre comme, par exemple, Bruce Perens (ancienmainteneur du systme dexploitation Debian http://www.debian.org et fondateur du projet destandardisation Linux Standard Base) ou Eric S. Raymond. Lobjectif de ce nouveau mouve