php livre page vii mercredi, 5. septembre 2007 6:12...

23
Table des matières Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXI Pourquoi ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXI Structure de l’ouvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXII Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXIV CHAPITRE 1 Qu’est-ce que PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Introduction à PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Un langage Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Que faire avec PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Particularités de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Mode de développement du projet PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Nouveautés de PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 La programmation orientée objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Refonte et simplification de XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Intégration de la base SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Simplification des tâches courantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 PDO : socle commun aux SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Architecture et fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Architecture technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Fonctionnement de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Upload: others

Post on 05-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matières

Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXI

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

Structure de l’ouvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXXII

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

CHAPITRE 1

Qu’est-ce que PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Introduction à PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Un langage Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Que faire avec PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Particularités de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Mode de développement du projet PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

Nouveautés de PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

La programmation orientée objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Refonte et simplification de XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Intégration de la base SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Simplification des tâches courantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11PDO : socle commun aux SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Architecture et fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Architecture technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Fonctionnement de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

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

Page 2: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéVIII

PHP en France et dans le monde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Les chiffres d’utilisation en France . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14La communauté française . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Les ressources d’aide francophones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Les ressources d’aide anglophones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

CHAPITRE 2

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

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

Incompatibilités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28PHP en ligne de commande et en CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Modes d’installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

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

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

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

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

Utilisation automatisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Installation manuelle d’Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Installation manuelle de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Installation manuelle de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Gestion des droits d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Modules additionnels PECL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Configuration de PHP avec php.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

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

CHAPITRE 3

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

Insertion de PHP dans HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Balises d’ouverture et de fermeture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

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

Page 3: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresIX

Enchaînement des instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Structure du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Exécuter du code PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

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

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

Types de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

Booléens (boolean). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Les nombres entiers (integer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Les nombres flottants (double, float) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Les chaînes de caractères (string). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Les tableaux (array) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71Transtypage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

CHAPITRE 4

Traitements de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Opérateurs d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Opérateurs arithmétiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Opérateurs combinés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83La concaténation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Opérateurs logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Opérateurs sur les bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Priorités entre opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Structures de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Les conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Les instructions d’arrêt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

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

Déclaration d’une fonction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Appel de fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Visibilité des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Retourner plusieurs valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Nombre de paramètres indéfini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

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

Page 4: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéX

Inclure des bibliothèques ou des fichiers . . . . . . . . . . . . . . . . . . . . . . . . 105

Différence entre require() et include() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106require_once() et include_once() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

CHAPITRE 5

Traitements de chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

Fonctions d’affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

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

Informations sur une chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Accéder à un caractère précis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Valeur ASCII d’un caractère. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Taille d’une chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Position d’une sous-chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Présence de certains caractères. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

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

Protections et échappements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Conventions d’affichage locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Jeux de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Manipulations sur les chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

Recherche d’une sous-chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Récupérer une sous-chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Remplacer un motif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Fonctions d’élagage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Remplissage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Changement de casse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Coupure de paragraphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

CHAPITRE 6

Utilisation des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Taille d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Recherche d’un élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

Présence dans le tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Recherche de la clé correspondante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129Nombre d’occurrences d’un élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Récupération aléatoire d’éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

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

Page 5: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXI

Trier les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

Tri par valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Tri en ordre inverse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Garder les associations clé-valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Tri par clé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Tri naturel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Trier avec une fonction utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Tri multicritère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

Extractions et remplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

Affecter des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Sérialisation de tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Extraction d’un sous-tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Remplacement d’un sous-tableau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

Gestion des clés et des valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Liste des clés utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137Liste des valeurs utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137Échanger les clés et les valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Fusions et séparations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

Fusion de plusieurs tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Séparation d’un tableau en plusieurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Différences et intersections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Différences entre tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Intersections entre deux tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Gestion des doublons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Gestion des piles et des files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

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

CHAPITRE 7

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

Fonction d’affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Informations de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Affichage de débogage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Coloration syntaxique de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Fonctions mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Connaître les extrémités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148Arrondir des valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

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

Page 6: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXII

Créer des valeurs aléatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Travailler sur différentes bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

Fonctions de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Formater une date/heure locale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Fonctions réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Résolution DNS d’une adresse IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Corrélation IP/DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

Fonctions de chiffrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Quelques définitions : chiffrement, hachage, codage/décodage . . . . . . . . . 157Fonctions de hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Fonctions de codage et décodage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Exécution de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Fonction à l’arrêt du script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Exécution d’une chaîne de code PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164Login/mot de passe sécurisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

CHAPITRE 8

Formulaires et superglobales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Formulaires HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Nouveautés depuis PHP 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Caractères spéciaux et HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Création du formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

Déclaration d’un formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169Méthode d’envoi du formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170Champ de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171Zone de texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Cases à cocher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174Bouton radio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175Liste de sélections et liste déroulante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Champs cachés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Les champs pour mot de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Image cliquable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Envoi d’images et de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Réception des données en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

Utilisation des superglobales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Récupération d’une donnée simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

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

Page 7: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXIII

Retours à la ligne et zones de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182Utilisation des cases à cocher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184Validation de données avec l’extension Filter . . . . . . . . . . . . . . . . . . . . . . 184Listes à sélections multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191Gestion des images cliquables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Téléchargements d’images et de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 192Formulaire dynamique et tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Autres problématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

Gestion du temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Gestion de la taille des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Stockage des fichiers temporaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Sécurité et données reçues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Procédure de gestion des formulaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

CHAPITRE 9

Environnement web et superglobales . . . . . . . . . . . . . . . . . . . . . . 199

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

Client-serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199En-tête et contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Variables superglobales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

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

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

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

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

Paramètres de la connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

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

Description de la requête HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

Paramètres de la requête. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209L’adresse demandée (URL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Informations fournies par le client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

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

Page 8: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXIV

Environnement système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

Nom du script exécuté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

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

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

Lecture des arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Nombre d’arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

CHAPITRE 10

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

Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

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

Lecture et écriture d’un cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

Envoi d’un cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Lecture d’un cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Suppression d’un cookie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220Modifier les valeurs d’un cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

Validité et date d’expiration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

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

Restriction de portée du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

Limitations et sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

Limitations dues aux navigateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225Les cookies n’ont aucune sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

Cas d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

Outil de personnalisation d’affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

CHAPITRE 11

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

Qu’est-ce qu’une session ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

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

Utilisation avancée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

Fonctionnement interne des sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Suppression d’une session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Définition manuelle de l’initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

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

Page 9: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXV

Stockage des données de session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Paramètres du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Accès concurrents aux sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

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

Initialisation des sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Stockage des données de session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Paramètres du cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Expiration des sessions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Gestion du cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Transmission de l’identifiant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

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

Définir un gestionnaire personnalisé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Limitations et sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Cachez les sessions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245N’utilisez pas la réécriture des liens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Les identifiants par défaut suffisent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Attaque par fixation de session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Vérifiez l’identité de l’utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246N’ayez pas confiance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

Cas d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

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

CHAPITRE 12

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

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

Pourquoi programmer en objet ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Qu’est-ce qu’un objet ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Qu’est-ce qu’une classe ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Qu’est-ce qu’une instance ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

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

Déclarer une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Utilisation des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Vérifier le type d’un objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

Copie et référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Le comportement PHP 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264PHP 5, le passage par référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

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

Page 10: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXVI

Garder la compatibilité avec PHP 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266La copie explicite d’objet, ou clonage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Égalité et identité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Constructeurs et destructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

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

La notion d’héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

Définition de la notion d’héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Définition d’une classe héritée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Redéfinition d’attribut ou de méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Accès aux méthodes parentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

Sûreté de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

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

Accès statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

Accès à une classe arbitraire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Définition en vue d’un accès statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Accès à la classe en cours. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Accès à la classe parente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

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

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

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

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

Affectations des attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Lecture d’attribut (Mutator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Appel d’une méthode (Accessor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

Itérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

Utilisation simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288Utilisation complète . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

Notations d’index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

Auto-incrémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

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

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

Principes pour démarrer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Les fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

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

Page 11: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXVII

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

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

CHAPITRE 13

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

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

Fonctions d’accès rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

Ouverture d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

Lecture d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

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

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

Fermeture d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

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

Accès concurrents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

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

Copie et déplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

Création et effacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

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

Gestion des répertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Parcourir un répertoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Position dans l’arborescence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

Créations et effacements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

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

Existence d’un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

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

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

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

Nom et adresse d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

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

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

Permissions et droits d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

Changement de propriétaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

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

Masque par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

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

Page 12: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXVIII

Sécurité et fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Permissions et droits d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Arguments utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Safe_mode et open_basedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Cas d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

Outil de gestion documentaire simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

CHAPITRE 14

Gestion des flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

Exécution de programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

Lancement sans interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Lancement interactif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341Sécurité et programmes externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

Gestion des sockets réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

Ouverture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348Lecture et écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349Fermeture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349Fonctions de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Gestion unifiée des flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

Types de flux gérés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352Utilisation simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Contextes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361Types personnalisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

Cas d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

Système de paiement en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Sauvegardes automatiques pour interface réseau . . . . . . . . . . . . . . . . . . . . 369Conversion entre jeux de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

CHAPITRE 15

Flux de sortie PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

Principes et utilisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

Principe de fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375Exemples d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

Gestion du tampon de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

Début et arrêt de la mise en tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

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

Page 13: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXIX

Récupération du contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

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

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

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

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

Conversion entre jeux de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

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

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

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

Délai avant affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

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

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

CHAPITRE 16

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

De l’utilité de gérer des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

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

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

Prérequis techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

Anatomie d’un e-mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

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

Courrier électronique multimédia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

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

Envoyer des pièces jointes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

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

Astuces et sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406

Lancer un script à la réception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406

Vérification d’une adresse e-mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

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

Bibliothèques Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

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

Cas d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

Gestion d’une lettre d’information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

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

Page 14: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXX

CHAPITRE 17

Travailler avec une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

Utilisation d’un SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

Qu’est-ce qu’un SGBD ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413Travailler avec un SGBD relationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

Présentation de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

Points forts/points faibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417Types de tables MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

Outils d’administration Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

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

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

Créer une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424Créer des tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425Modifier des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431Supprimer des tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432Insérer des données (INSERT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432Modifier des données (UPDATE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434Effacer des données (DELETE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435Remplacer des données (REPLACE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436Filtrer avec la clause WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437Sélectionner des données (SELECT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438Gérer les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

CHAPITRE 18

Utiliser une base de données avec PHP . . . . . . . . . . . . . . . . . . . . 443

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

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

Particularités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445

Utiliser votre base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

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

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

Connexion au serveur de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

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

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

Page 15: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXXI

Utiliser des connexions persistantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451Gérer les erreurs de connexion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452Fermer une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453Se connecter à plusieurs bases de données. . . . . . . . . . . . . . . . . . . . . . . . . 454Créer un fichier de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

Effectuer une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

Requêtes invalides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Requête de sélection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Requête d’insertion / modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461Sécurité et échappements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

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

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

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

Les requêtes préparées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

Construction de la requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469Préparer une requête. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470Lier des données à des paramètres et exécution. . . . . . . . . . . . . . . . . . . . . 470Exploitation d’une requête de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . 472Fermeture de la requête préparée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

Cas d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

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

CHAPITRE 19

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

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

Qu’est-ce qu’une erreur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483Pourquoi gérer les erreurs ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484Que faire avec les erreurs ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484

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

Description d’une erreur PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485Les bases d’une gestion d’erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486Niveaux d’erreurs et filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488Créer une erreur manuellement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491Affichage des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492Journalisation des erreurs (log) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493Personnaliser le gestionnaire d’erreurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . 498

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

Page 16: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXXII

Les assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

Description d’une assertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Utilisation d’une assertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Désactivation des assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Configuration des assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Personnalisation de la gestion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502

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

Description d’une exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503Lancement d’une exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Réception d’une exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Filtrage des exceptions reçues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505Propagation des exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506Utilisation des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508

Politiques de gestion d’erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

Le développement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509Être averti lors d’un problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509Toujours agir lors d’une erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510Externaliser les alertes de sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510Gardez des traces sur le contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510

CHAPITRE 20

XML : concepts et SimpleXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

De l’utilité du XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

Gains apportés par XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514Exemples d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514

Présentation et prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514

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

Gérer le XML à la main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521

Création d’un nouveau fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521Relecture et manipulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523

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

Prise en main rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524Fonctionnalités avancées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525

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

Import et export d’un document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527

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

Page 17: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXXIII

Manipulation des éléments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528

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

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

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

Cas d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

Lecture d’un fichier RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

CHAPITRE 21

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

Relecture d’un XML avec SAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

Fonctionnement des événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540

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

Réagir à des événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

Envoi des données et analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

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

Structure générale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550

L’objet document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551

Description d’un nÏ ud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553

Navigation dans l’arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555

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

Création de nœuds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562

Modification de l’arbre XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564

Création d’un document complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566

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

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

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

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

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

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

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

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

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

Paramètres de transformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572

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

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

Page 18: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXXIV

CHAPITRE 22

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

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

Protocoles et technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575Principe d’un appel à un service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579

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

Créer un client SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584Créer un serveur SOAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585Persistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589Cache WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590

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

Créer un client SOAP sans WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591Serveur SOAP sans WSDL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592Gestion des types et des structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593

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

Différents formats de message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595Compatibilité avec un service .Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596

Autres détails et possibilités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596

Codage caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596Définir des en-têtes SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597Utiliser un autre transport que HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598

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

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

CHAPITRE 23

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

De l’utilité des templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601

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

Une solution légère : PHPLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602Le couteau suisse : smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602Un système original : Templeet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603

Différentes approches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603

L’approche PHP natif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604

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

Page 19: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXXV

L’approche search&replace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606L’approche par composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608Utilisation de XML et XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609

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

Pérennité de la solution retenue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611Simplicité pour les graphistes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611Simplicité pour les développeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612Les performances du moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612

Bibliothèques Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

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

CHAPITRE 24

Les systèmes de cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627

De l’utilité des caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627

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

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

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

Cache d’une page HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629Cache de fichiers de différents types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631Cache de configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632

Cache des données utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632

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

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

Dates de mises à jour des fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634Utilisation des serveurs proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635Utiliser la date d’expiration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637

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

Détection de la modification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638Temps de validité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638Sites semi-statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639

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

La classe générique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640

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

Page 20: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXXVI

Classe pour le Cache HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642Autres caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643

Pear::Cache_Lite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644

Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644Spécialisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645

Étude de cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646

Cache pour un site d’actualité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646

CHAPITRE 25

Gestion des images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649

Utilité de la gestion d’images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649

Prérequis techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650

Initialisation et utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650

La création du modèle de l’image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650Libérer les ressources mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653Affichage de l’image sur le navigateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654Enregistrer l’image dans un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655

Travail sur une image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656

Le référentiel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656Tracer des formes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656Écrire du texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659Copie d’une zone d’image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663Gestion de la palette de couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664Connaître la taille d’une image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665

Astuces et remarques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666

Éviter les fausses couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666Limite de temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666Malvoyants et référencement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666

L’outil Open Source de gestion d’albums photos : Gallery . . . . . . . . . 667

La bibliothèque Open Source JpGraph . . . . . . . . . . . . . . . . . . . . . . . . . 668

Installation et configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669Architecture de la JpGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670Création d’un graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671Envoi et enregistrement de l’image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672Gérer les polices de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672Propriétés et méthodes communes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673

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

Page 21: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXXVII

Les graphiques à base de lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673Les graphiques en camembert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676D’autres types de graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679

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

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

CHAPITRE 26

Expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685

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

Protections et échappements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686Délimitation et présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686Chaîne de recherche simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687Construction d’expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688Gestion des occurrences multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693Captures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695Modificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696

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

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

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

Fonctionnement du moteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703Stratégies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704Boucles infinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704

CHAPITRE 27

Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705

Qu’est-ce que la sécurité ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705

Préoccupations du gestionnaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706Préoccupations de l’utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706Pourquoi parler de l’utilisateur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707

Configuration et sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708

Interface avec le serveur web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709Safe_mode et restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711

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

Page 22: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

PHP 5 avancéXXVIII

Échappement automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713Sessions et identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713Mises à jour du logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715Stockage des données et fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715

Sécurité de l’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717

Vérification des entrées utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717Éviter les principales attaques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721Emplacement des contrôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725Gérer les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728Sécuriser les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728Chiffrement et sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729

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

Vérifiez vos résultats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732Ne croyez pas l’utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733N’exagérez pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734Faites faire un audit externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734

CHAPITRE 28

Outils de développement PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735

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

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

Les outils de modélisation/RAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749

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

CHAPITRE 29

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

Ce qu’est un framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763

Un cadre de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763La séparation MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764Les avantages d’un framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764

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

Page 23: PHP Livre Page VII Mercredi, 5. septembre 2007 6:12 18ec56229aec51f1baff1d-185c3068e22352c56024573e929788ff.ssl.cf1.rackcdn.co…PHP 5 avancé VIII PHP en France et dans le monde

Table des matièresXXIX

Quelques frameworks disponibles en Open Source . . . . . . . . . . . . . . . 765

Copix et Jelix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765Symfony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766Zend Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766Les autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767

Courte introduction à Symfony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768

Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768Initialisation de l’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768Génération du modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769Premier contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769Lien avec la vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771Le test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772Quelques points non abordés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773

ANNEXE

Ressources en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775

Bibliothèques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775Applications PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779ERP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785

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