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