Télécharger (format pdf)

Transcription

Télécharger (format pdf)
Editions ENI
PHP 5.6
Développez un site web
dynamique et interactif
Collection
Ressources Informatiques
Table des matières
1
Table des matières
Les exemples à télécharger sont disponibles à l'adresse suivante :
http://www.editions-eni.fr
Saisissez la référence ENI de l'ouvrage RI56PHP dans la zone de recherche
et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.
Chapitre 1
Introduction
1. Objectif de l'ouvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2. Bref historique de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3. Où se procurer PHP ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4. Conventions d'écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Chapitre 2
Vue d'ensemble de PHP
1. Qu'est-ce que PHP ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2. Structure de base d'une page PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1 Les balises PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 La fonction echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Le séparateur d'instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Le commentaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Mixer du PHP et de l'HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 Règles de nommage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
15
16
17
18
18
22
3. Configuration de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1 Le fichier de configuration php.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Informations sur la configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Jeu de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
22
23
26
4. Utiliser PHP en ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2
PHP 5.6
Développez un site web dynamique et interactif
Chapitre 3
Variables, constantes, types et tableaux
1. Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.2 Portée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.3 Fonctions utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.1 Initialisation et affectation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2 Portée et durée de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.3 Fonctions utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4 Variable dynamique (ou variable variable) . . . . . . . . . . . . . . . . . . . . . . 41
3. Types de données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.1 Types disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2 Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.3 Fonctions utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4. Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.3 Manipulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.4 Portée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.5 Fonctions utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5. Quelques fonctions utiles sur les chaînes
de caractères, les dates et les nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.2 Manipulation des chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . 80
5.3 Utiliser les expressions rationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.3.2 Structure d’une expression rationnelle . . . . . . . . . . . . . . . . . . . . 97
5.3.3 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
5.4 Manipulation des dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.5 Générer un nombre aléatoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3
Table des matières
Chapitre 4
Opérateurs
1. L'opérateur d'affectation par valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
2. L'opérateur d'affectation par référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
3. Les opérateurs arithmétiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
4. L'opérateur de chaîne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
5. Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6. Les opérateurs logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7. L'opérateur ternaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8. Les opérateurs combinés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
9. Précédence des opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Chapitre 5
Structures de contrôle
1. Les contrôles conditionnels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
1.1 If. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
1.2 Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
2. Les contrôles itératifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1 While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Do ... while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Continue et break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
140
140
142
143
146
3. Inclure un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
3.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
3.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
4. Interrompre le script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
4
PHP 5.6
Développez un site web dynamique et interactif
Chapitre 6
Fonctions et classes
1. Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
1.2 Déclaration et appel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
1.3 Paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
1.4 Valeur de retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
1.5 Considérations sur les variables utilisées dans les fonctions . . . . . . . 163
1.6 Les constantes et les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
1.7 Récursivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
1.8 Fonction anonyme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
1.9 Fonction générateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
2. Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
2.1 Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
2.2 Définir une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
2.3 Instancier une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
2.4 Héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
2.5 Autres fonctionnalités sur les classes. . . . . . . . . . . . . . . . . . . . . . . . . . 181
2.5.1 Classe ou méthode abstraite . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
2.5.2 Classe ou méthode finale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
2.5.3 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
2.5.4 Attribut ou méthode statique - Constante de classe . . . . . . . . 184
2.5.5 Traits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
2.6 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
3. Les espaces de noms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Chapitre 7
Gérer les formulaires
1. Vue d'ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
1.1 Petit rappel sur les formulaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
1.2 Interaction entre un formulaire et un script PHP. . . . . . . . . . . . . . . . 198
2. Récupérer les données saisies dans le formulaire . . . . . . . . . . . . . . . . . . . . . 203
2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
2.2 Les différents types de zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
5
Table des matières
2.3 Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
3. Construire un formulaire dynamiquement . . . . . . . . . . . . . . . . . . . . . . . . . 221
4. Contrôler les données saisies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
4.1 Vue d'ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
4.2 Vérifications classiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
5. Les problèmes sur les données saisies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
5.1 La fonctionnalité de "magic quotes" . . . . . . . . . . . . . . . . . . . . . . . . . . 231
5.2 Autres problèmes sur les données saisies . . . . . . . . . . . . . . . . . . . . . . 232
6. Utilisation des filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
6.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
6.2 Application aux formulaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
7. Aller sur une autre page à la fin du traitement . . . . . . . . . . . . . . . . . . . . . . 250
Chapitre 8
Accéder aux bases de données
1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
1.1 Vue d'ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
1.2 La notion de fetch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
2. Utilisation de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Connexion et déconnexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Lire des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Mettre à jour des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Gérer les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 Requêtes préparées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.1 Vue d’ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.2 Préparer une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.3 Lier des variables PHP aux paramètres de la requête . . . . . . . .
2.6.4 Exécuter la requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.5 Obtenir des informations sur le résultat d'une requête
de mise à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.6 Lier des variables PHP aux colonnes du résultat
d'une requête de lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.7 Extraire le résultat d'une requête de lecture. . . . . . . . . . . . . . .
260
260
261
263
283
290
293
293
295
296
297
298
300
302
6
PHP 5.6
Développez un site web dynamique et interactif
2.6.8 Utiliser un résultat stocké . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
2.6.9 Gérer les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
2.6.10 Fermer une requête préparée . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
2.7 Utilisation de l’extension MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
3. Utilisation d'Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
3.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
3.2 Environnement NLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
3.3 Connexion et déconnexion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
3.4 Lire des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
3.5 Mettre à jour des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
3.6 Appeler une procédure stockée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
3.7 Illustration des problèmes liés à l'environnement NLS . . . . . . . . . . . 355
3.8 Gérer les erreurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
4. Utilisation de SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
4.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
4.2 Ouvrir et fermer une base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
4.3 Lire des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
4.4 Mettre à jour des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
4.5 Gérer les erreurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
5. PHP Data Objects (PDO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
6. "Magic quotes" : le retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
6.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
6.2 Chargement des données en provenance d'une base . . . . . . . . . . . . . 390
6.3 Mise à jour des données dans la base . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Chapitre 9
Gérer les sessions
1. Description du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
2. Authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
2.1 Vue d'ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
2.2 Saisie de l'identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
2.3 Vérifier l'identification saisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
3. Créer un identifiant unique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
7
Table des matières
4. Passer des informations par l'URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 "magic quotes" : le retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Application à la gestion des sessions . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Remarques et conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
407
407
412
412
418
5. Passer des informations par une zone de formulaire cachée. . . . . . . . . . . .
5.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Application à la gestion des sessions . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Remarques et conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
420
420
422
424
6. Utiliser des cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 "magic quotes" : le retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Application à la gestion des sessions . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4 Remarques et conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
425
425
432
432
437
7. Utiliser la gestion des sessions de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Mise en œuvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 Gérer soi-même la transmission de l'identifiant de session . . . . . . . .
7.4 Quelques directives de configuration supplémentaires . . . . . . . . . . .
7.5 Application à la gestion des sessions . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6 Remarques et conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
438
438
439
453
459
460
466
8. Conserver des informations d'une visite à une autre . . . . . . . . . . . . . . . . . 469
9. Petite synthèse sur les variables Get/Post/Cookie/Session. . . . . . . . . . . . . 475
Chapitre 10
Envoyer un courrier électronique
1. Vue d'ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
2. Envoyer un message texte sans pièce jointe . . . . . . . . . . . . . . . . . . . . . . . . 479
3. Envoyer un message au format MIME . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Message au format HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Message avec pièce jointe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
482
482
482
486
8
PHP 5.6
Développez un site web dynamique et interactif
Chapitre 11
Gérer les fichiers
1. Manipuler les fichiers sur le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
2. magic quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
3. Télécharger un fichier à partir du client : "file upload" . . . . . . . . . . . . . . . . 499
4. Télécharger un fichier à partir du serveur : "download" . . . . . . . . . . . . . . . 504
Chapitre 12
Gérer les erreurs dans un script PHP
1. Vue d'ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
2. Les messages d'erreur PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
3. Les fonctions de gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Annexe
1. Variables PHP prédéfinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
2. Constantes PHP prédéfinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
3. Exemples complémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
3.2 Lire un document XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
3.3 Générer un document PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
3.4 Générer une image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Editions ENI
Maîtriser Joomla!
Guide professionnel
du développement d’applications
(2ième édition)
Collection
Expert IT
Table des matières
Table des matières
Les éléments à télécharger sont disponibles à l'adresse suivante : http://www.editions-eni.fr Saisissez la référence ENI de l'ouvrage EI3.2JOO dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.
Avant-propos
1. Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2. Ce dont vous avez besoin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3. Ce qui n'est pas traité dans le livre . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Chapitre 1
Introduction
1. Aperçu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2. Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. Nouveautés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4. Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5. Arborescence générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6. Les extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Chapitre 2
Cheminement d'une requête utilisateur
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2. Chargement du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.1 Définition des constantes PHP . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2 Chargement du Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.3 Étapes supplémentaires pour l'administration . . . . . . . . . . . . . . 29
1
Maîtriser Joomla!
2
Guide professionnel du développement d’applications
3. Construction de l'application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4. Exécution de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1 Initialisation de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2 Calcul de l'itinéraire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.1 Analyse de l'URL en mode RAW . . . . . . . . . . . . . . . . . . . 37
4.2.2 Analyse de l'URL en mode SEF . . . . . . . . . . . . . . . . . . . . . 37
4.3 Suivi de l'itinéraire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5. Préparation de l'affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6. Envoi de la réponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Chapitre 3
Développement de modules
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2. Description du module. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3. Entrée du module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4. Fichier de soutien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5. Affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6. Fichiers de langues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7. Mise à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.1 Définition du serveur de mise à jour . . . . . . . . . . . . . . . . . . . . . . 62
7.2 Définition du fichier de mise à jour. . . . . . . . . . . . . . . . . . . . . . . 63
Chapitre 4
Développement de composants
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2. Entrée du composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.1 Partie publique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.2 Partie administrateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Table des matières
3. Le paradigme « Modèle-Vue-Contrôleur » . . . . . . . . . . . . . . . . . . . . . . 69
3.1 Implémentation dans Joomla! . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.1.1 Les modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.1.2 Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.1.3 Les contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.1.4 Fonctionnement général du paradigme MVC . . . . . . . . . 75
3.2 Spécialisation des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.2.1 Les modèles de collections. . . . . . . . . . . . . . . . . . . . . . . . . 76
3.2.2 Les modèles de formulaires . . . . . . . . . . . . . . . . . . . . . . . . 78
3.2.3 Les modèles d'administration . . . . . . . . . . . . . . . . . . . . . . 81
3.3 Spécialisation des contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.1 La gestion d'un formulaire . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.2 Le contrôleur d'administration . . . . . . . . . . . . . . . . . . . . . 90
4. Construction du composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.1 Convention de l'arborescence . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.1.1 Le dossier des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.1.2 Le dossier des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.1.3 Le dossier des contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.1.4 Le dossier des fichiers de soutien . . . . . . . . . . . . . . . . . . . 94
4.2 Construction de la partie publique . . . . . . . . . . . . . . . . . . . . . . . 94
4.2.1 Entrée du composant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.2.2 Les modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.2.3 Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
4.2.4 Les contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.2.5 Le routeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.2.6 Calcul du cheminement . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.2.7 Classes de soutien HTML . . . . . . . . . . . . . . . . . . . . . . . . 108
4.2.8 Spécialisation de la classe JCategories . . . . . . . . . . . . . . 109
4.3 Construction de la partie administrateur . . . . . . . . . . . . . . . . . 111
4.3.1 Entrée du composant. . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4.3.2 Les modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
4.3.3 Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
4.3.4 Les contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
3
Maîtriser Joomla!
4
Guide professionnel du développement d’applications
4.3.5 Configuration générale . . . . . . . . . . . . . . . . . . . . . . . . . . 115
4.3.6 Définition des privilèges . . . . . . . . . . . . . . . . . . . . . . . . . 115
4.3.7 Description du fichier d'installation du composant . . . 118
Chapitre 5
Développement de plugins
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
2. Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
3. Obtention d'un plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4. Écriture d'un nouveau plugin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4.1 Le fichier XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4.2 Le fichier PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
4.3 Les événements standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.3.1 Groupe authentication . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.3.2 Groupe captcha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4.3.3 Groupe content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4.3.4 Groupe editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.3.5 Groupe editors-xtd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.3.6 Groupe extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.3.7 Groupe finder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
4.3.8 Groupe installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4.3.9 Groupe quickicon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4.3.10 Groupe search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.3.11 Groupe system. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
4.3.12 Groupe twofactorauth . . . . . . . . . . . . . . . . . . . . . . . . . . 146
4.3.13 Groupe user . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
5. Focus sur les plugins Smart Search . . . . . . . . . . . . . . . . . . . . . . . . . . 148
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
5.2 Activation du moteur Smart Search . . . . . . . . . . . . . . . . . . . . . 149
Table des matières
5.3 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
5.3.1 Le fichier XML de configuration. . . . . . . . . . . . . . . . . . . 150
5.3.2 Le fichier PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
5.3.3 La classe FinderIndexerAdapter . . . . . . . . . . . . . . . . . . . 151
5.3.4 La classe FinderIndexerResult. . . . . . . . . . . . . . . . . . . . . 160
5.4 Complément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
6. Application au composant de gestion de dictionnaire . . . . . . . . . . . 163
Chapitre 6
Les templates
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
2. L'arborescence d'un template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
3. Le fichier principal de mise en page . . . . . . . . . . . . . . . . . . . . . . . . . . 167
4. Les fichiers secondaires de mise en page . . . . . . . . . . . . . . . . . . . . . . 169
5. Les paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6. Les fichiers médias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
7. Les styles de modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8. La surcharge de l'affichage standard . . . . . . . . . . . . . . . . . . . . . . . . . 173
9. Les gabarits partagés de Joomla! 3.x . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.2 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
9.3 Surcharge à partir d'un template . . . . . . . . . . . . . . . . . . . . . . . . 177
Chapitre 7
Les outils de la librairie
1. Les classes fondamentales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
1.1 Le chargeur de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
1.2 La classe JObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
1.3 L'usine d'objets globaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
5
6
Maîtriser Joomla!
Guide professionnel du développement d’applications
1.4 Les registres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
1.5 L'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
1.5.1 La classe JApplicationCms . . . . . . . . . . . . . . . . . . . . . . . 189
1.5.2 La classe JMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
1.5.3 La classe JRouter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
1.5.4 La classe JCategories . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
1.5.5 La classe de soutien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
1.6 Le document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
1.7 Le cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
2. La base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
2.1 Opérations sur la base de données. . . . . . . . . . . . . . . . . . . . . . . 225
2.1.1 Méthodes de création et de destruction. . . . . . . . . . . . . 225
2.1.2 Méthodes d'informations . . . . . . . . . . . . . . . . . . . . . . . . 226
2.1.3 Opérations de sélection. . . . . . . . . . . . . . . . . . . . . . . . . . 227
2.2 Construction d'une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
2.3 Opérations sur les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
2.4 Utilisation des ensembles emboîtés . . . . . . . . . . . . . . . . . . . . . 243
3. La génération de code HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
3.1 Classes de soutien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
3.1.1 Description du mécanisme . . . . . . . . . . . . . . . . . . . . . . . 248
3.1.2 Les fonctions implémentées . . . . . . . . . . . . . . . . . . . . . . 250
3.2 Les barres de boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
3.3 Les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
3.3.1 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
3.3.2 Les champs prédéfinis . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
3.3.3 Les règles prédéfinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
3.4 La bibliothèque d’Interface Utilisateur Joomla (JUI) . . . . . . . . 291
3.4.1 La librairie Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
3.4.2 La bibliothèque d'icônes IcoMoon . . . . . . . . . . . . . . . . . 299
3.4.3 Le langage LESS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Table des matières
4. La gestion de la technologie Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
4.1 Définition d'une requête Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . 302
4.2 Interfaçage avec les modules . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
4.3 Interfaçage avec les plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
5. La gestion des privilèges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
5.1 Les utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
5.2 Les règles d'accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
5.2.1 La classe JAccess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
5.2.2 La classe JAccessRule . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
5.2.3 La classe JAccessRules . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
6. L'environnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
6.1 La requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
6.2 Le navigateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
6.3 Le résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
6.4 Les URI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
6.5 La session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
7. Le système de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
7.1 Les fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
7.2 Les dossiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
7.3 Les chemins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
7.4 Les flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
7.5 Les archives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
8. Les outils du développeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
8.1 Fichiers de traces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
8.2 Performances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
9. Les utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
9.1 L'internationalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
9.1.1 L'interface utilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
9.1.2 Le système d'aide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
9.2 Les dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
9.3 Les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
9.4 Les filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
7
8
Maîtriser Joomla!
Guide professionnel du développement d’applications
9.5 Les tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
9.6 Le cryptage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
9.7 L'envoi de courriers électroniques . . . . . . . . . . . . . . . . . . . . . . . 370
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

Documents pareils