Vous êtes sur la page 1sur 961

Référence

PHP & MySQL

Luke Welling Laura Thomson

Réseaux et télécom
Réseaux
et télécom
Développement Web
Développement
Web
Génie logiciel
Génie logiciel
Sécurité
Sécurité
Système d’exploitation
Système
d’exploitation

4 e édition

Thomson Réseaux et télécom Développement Web Génie logiciel Sécurité Système d’exploitation 4 e édition

PHP & MySQL

4 e édition

Luke Welling & Laura Thomson

PHP & MySQL 4 e édition Luke Welling & Laura Thomson

Pearson Education France a apporté le plus grand soin à la réalisation de ce livre afin de vous four- nir une information complète et fiable. Cependant, Pearson Education France n’assume de respon- sabilités, ni pour son utilisation, ni pour les contrefaçons de brevets ou atteintes aux droits de tierces personnes qui pourraient résulter de cette utilisation.

Les exemples ou les programmes présents dans cet ouvrage sont fournis pour illustrer les descriptions théoriques. Ils ne sont en aucun cas destinés à une utilisation commerciale ou professionnelle.

Pearson Education France ne pourra en aucun cas être tenu pour responsable des préjudices ou dommages de quelque nature que ce soit pouvant résulter de l’utilisation de ces exemples ou programmes.

Tous les noms de produits ou marques cités dans ce livre sont des marques déposées par leurs propriétaires respectifs.

Publié par Pearson Education France 47 bis, rue des Vinaigriers 75010 PARIS Tél. : 01 72 74 90 00 www.pearson.fr

Mise en pages : TyPAO

ISBN : 978-2-7440-4103-7 Copyright © 2009 Pearson Education France

Tous droits réservés

Titre original : PHP and MySQL Web Development, Fourth edition

Traduit et révisé de l’américain par Éric Jacoboni (édition précédente : Patrick Fabre et David de Loenzien)

ISBN original : 978-0-672-32916-6 Copyright © 2009 by Pearson Education, Inc.

All rights reserved

Addison-Wesley Professional 800 East 96th Street, Indianapolis Indiana 46240 USA

Aucune représentation ou reproduction, même partielle, autre que celles prévues à l’article L. 122-5 2˚ et 3˚ a) du code de la propriété intellectuelle ne peut être faite sans l’autorisation expresse de Pearson Education France ou, le cas échéant, sans le respect des modalités prévues à l’article L. 122-10 dudit code.

No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

Table des matières

Introduction

1

Les points forts de ce livre

1

Ce que vous apprendrez en lisant ce livre

2

Présentation de PHP

2

Présentation de MySQL

3

Pourquoi utiliser PHP et MySQL ?

4

Quelques avantages de PHP

4

Performances

5

Adaptabilité

5

Intégration avec les bases de données

5

Bibliothèques intégrées

5

Coût

6

Facilité d’apprentissage de PHP

6

Support orienté objet

6

Portabilité

6

Souplesse dans le processus de développement

6

Code source

7

Disponibilité du support et de la documentation

7

Nouveautés de PHP 5

7

Quelques avantages de MySQL

8

Performances

8

Coût réduit

8

Simplicité d’emploi

8

Portabilité

9

Code source

9

Disponibilité du support

9

Nouveautés de MySQL 5

9

Organisation de ce livre

10

Encore un mot

11

IV

PHP & MySQL

Partie I

Utilisation de PHP

1

PHP : les bases

15

Utilisation de PHP

16

Formulaires HTML

16

Code du formulaire

16

Traitement du formulaire

18

Incorporation de code PHP dans du code HTML

18

Balises PHP

19

Styles des balises PHP

20

Instructions de PHP

20

Espaces

21

Commentaires

22

Ajout de contenu dynamique

22

Appel de fonctions

23

Fonction date()

24

Accès aux variables des formulaires

24

Variables des formulaires

24

Concaténation de chaînes

28

Variables et littéraux

28

Identificateurs

29

Création de variables

30

Affectation de valeurs à des variables

30

Types des variables

30

Types de données du PHP

30

Intérêt du typage

31

Transtypage

32

Variables dynamiques

32

Constantes

33

Portée des variables

33

Opérateurs

35

Opérateurs arithmétiques

35

Opérateur de chaînes

36

Opérateurs d’affectation

36

Opérateurs de comparaison

39

Opérateurs logiques

40

Opérateurs sur les bits

41

Autres opérateurs

42

Utilisation des opérateurs : calcul des totaux d’un formulaire

44

Priorité et associativité des opérateurs : ordre d’évaluation des expressions

46

Table des matières

V

 

Fonctions sur les variables

47

Test et définition des types de variables

48

Test de l’état d’une variable

49

Réinterprétation des variables

49

Structures de contrôle

50

Prise de décision avec des structures conditionnelles

50

Instructions if

50

Blocs de code

51

Instructions else

51

Instructions elseif

52

Instructions switch

53

Comparaison des différentes structures conditionnelles

55

Structures de répétition : itérations

55

Boucles while

56

Boucles for et foreach

58

Boucles do…while

59

Interruption de l’exécution d’une structure de contrôle ou d’un script

59

Employer l’autre syntaxe des structures de contrôle

60

Utiliser declare

60

Prochaine étape : enregistrement de la commande du client

61

2

Stockage et récupération des données

63

Stockage des données en vue d’un usage ultérieur

63

Stockage et récupération des commandes de Bob

64

Présentation des fonctions de traitement des fichiers

65

Ouverture d’un fichier

65

Modes d’ouverture des fichiers

65

Utilisation de fopen() pour ouvrir un fichier

66

Ouverture de fichiers via FTP ou HTTP

69

Problèmes d’ouverture de fichiers

70

Écriture dans un fichier

72

Paramètres de la fonction fwrite()

73

Formats de fichiers

73

Fermeture d’un fichier

74

Lecture dans un fichier

76

Ouverture d’un fichier en lecture : fopen()

77

Détermination du moment où doit s’arrêter la lecture : feof()

77

Lecture d’une ligne à la fois : fgets(), fgetss() et fgetcsv()

77

Lecture de l’intégralité du contenu d’un fichier : readfile(), fpassthru() et file()

79

Lecture d’un caractère : fgetc()

80

Lecture d’une longueur arbitraire : fread()

80

VI

PHP & MySQL

 

Autres fonctions utiles pour la manipulation des fichiers

81

Vérification de l’existence d’un fichier : file_exists()

81

Détermination de la taille d’un fichier: filesize()

81

Suppression d’un fichier : unlink()

81

Navigation dans un fichier : rewind(), fseek() et ftell()

81

Verrouillage des fichiers

83

Une meilleure solution : les systèmes de gestion de base de données

84

Problèmes posés par l’usage de fichiers plats

84

La solution apportée par les SGBDR à ces problèmes

85

Pour aller plus loin

86

Pour la suite

86

3

Utilisation de tableaux

87

Qu’est-ce qu’un tableau ?

87

Tableaux à indices numériques

89

Initialisation des tableaux à indices numériques

89

Accès au contenu des tableaux

90

Utilisation de boucles pour accéder au contenu d’un tableau

91

Tableaux avec des indices différents

91

Initialisation d’un tableau

91

Accès aux éléments du tableau

92

Utilisation de boucles

92

Opérateurs sur les tableaux

94

Tableaux multidimensionnels

95

Tri de tableaux

99

Utilisation de la fonction sort()

99

Utilisation des fonctions asort() et ksort() pour trier des tableaux

100

Tri dans l’ordre inverse

100

Tri de tableaux multidimensionnels

100

Tris définis par l’utilisateur

101

Tris définis par l’utilisateur, dans l’ordre inverse

103

Réordonner des tableaux

103

Utilisation de la fonction shuffle()

103

Utilisation de la fonction array_reverse()

105

Chargement de tableaux à partir de fichiers

105

Autres manipulations de tableaux

109

Parcours d’un tableau : each, current(), reset(), end(), next(), pos() et prev() Application d’une fonction donnée à chaque élément d’un tableau :

109

array_walk() Comptage des éléments d’un tableau :

110

count(), sizeof() et array_count_values()

111

Conversion de tableaux en variables scalaires : extract()

112

Table des matières

VII

Pour aller plus loin

114

Pour la suite

114

4 Manipulation de chaînes et d’expressions régulières

115

Application modèle : formulaire intelligent de saisie d’un message (Smart Form Mail) 115

Mise en forme de chaînes

addslashes() et stripslashes()

strpos() et strrpos()

118

Élagage des chaînes : chop(), Itrim() et trim()

118

Mise en forme des chaînes en vue de leur présentation

119

Mise en forme de chaînes en vue de leur enregistrement :

123

Fusion et scission de chaînes au moyen des fonctions de traitement de chaîne

125

Utilisation des fonctions explode(), implode() et join()

125

Utilisation de la fonction strtok()

126

Utilisation de la fonction substr()

127

Comparaison de chaînes

128

Comparaison des chaînes : strcmp(), strcasecmp() et strnatcmp()

128

Longueur d’une chaîne : la fonction strlen()

129

Recherche et remplacement de sous-chaînes avec les fonctions de traitement de chaînes

129

Recherche de sous-chaînes dans des chaînes : strstr(), strchr(), strrchr() et stristr()

130

Détermination de la position d’une sous-chaîne dans une chaîne :

131

Substitution de sous-chaînes : str_replace() et substr_replace()

132

Introduction aux expressions régulières

134

Notions de base

134

Ensembles et classes de caractères

135

Répétition

136

Sous-expressions

137

Dénombrement de sous-expressions

137

Ancrage au début ou à la fin d’une chaîne

137

Branchement

138

Recherche littérale de caractères spéciaux

138

Récapitulatif sur les caractères spéciaux

138

Application au cas du formulaire "intelligent" de courrier électronique

139

Recherche de sous-chaînes au moyen d’expressions régulières

141

Remplacement de sous-chaînes au moyen d’expressions régulières

141

Découpage de chaînes au moyen d’expressions régulières

142

Pour aller plus loin

142

Pour la suite

143

5 Réutilisation de code et écriture de fonctions

145

Avantages de la réutilisation du code

145

Coût

145

VIII

PHP & MySQL

Fiabilité

146

Cohérence

146

Utilisation des instructions require() et include()

146

Extensions des noms de fichiers et require()

147

Utilisation require() pour créer des modèles de site web

149

Utilisation des options de configuration auto_prepend_file et auto_append_file 154

 

Utilisation de fonctions en PHP

155

Appel de fonctions

155

Appel d’une fonction indéfinie

157

Casse et noms des fonctions

158

Définir ses propres fonctions ?

158

Structure de base d’une fonction

159

Attribution d’un nom à une fonction

160

Paramètres

161

Portée

163

Passer des paramètres par référence et par valeur

166

Utilisation du mot-clé return

167

Retour de valeurs des fonctions

169

Récursivité

170

Pour aller plus loin

172

Pour la suite

172

6

PHP orienté objet

173

Concepts de la programmation orientée objet

173

Classes et objets

173

Polymorphisme

175

Héritage

176

Création de classes, d’attributs et d’opérations en PHP

176

Structure d’une classe

176

Constructeurs

177

Destructeurs

177

Instanciation des classes

178

Utilisation des attributs de classe

178

Contrôler l’accès avec private et public

180

Appel des opérations d’une classe

181

Implémentation de l’héritage en PHP

182

Contrôler la visibilité via l’héritage avec private et protected

183

Redéfinition (overriding)

184

Empêcher l’héritage et les redéfinitions avec final

186

Héritage multiple

186

Implémentation d’interfaces

187

Conception de classes

187

Implémentation d’une classe

189

Table des matières

IX

Comprendre les fonctionnalités orientées objet avancées de PHP

197

Constantes de classe

197

Méthodes statiques

197

Vérification du type de classe et indication de type

198

Clonage d’objets

199

Classes abstraites

199

Surcharge de méthodes avec call()

200

Utiliser autoload()

201

Implémentation des itérateurs et itérations

201

Conversion de classes en chaînes

203

Utiliser l’API d’introspection

203

Pour la suite

204

7 Gestion des exceptions

205

Notions relatives à la gestion des exceptions

205

La classe Exception

207

Exceptions définies par l’utilisateur

208

Exceptions dans le garage de Bob

210

Exceptions et autres mécanismes de gestion des erreurs en PHP

213

Lectures complémentaires

214

Prochaine étape

214

Partie II

Utilisation de MySQL

8 Conception d’une base de données web

217

Concepts des bases de données relationnelles

218

Tables

218

Colonnes

219

Lignes

219

Valeurs

219

Clés

219

Schémas

221

Relations

221

Conception d’une base de données web

222

Penser aux objets réels que vous modélisez

222

Éviter d’enregistrer des informations redondantes

224

Utiliser des valeurs de colonne atomiques

225

Choisir des clés pertinentes

226

Penser aux questions que vous poserez à votre base de données

226

X

PHP & MySQL

Éviter les architectures ayant beaucoup d’attributs vides

227

Récapitulatif sur les types de tables

228

Architecture d’une base de données web

228

Architecture

228

Pour aller plus loin

230

Pour la suite

230

9 Création d’une base de données web

231

Note sur l’utilisation du moniteur MySQL

232

Comment ouvrir une session MySQL

233

Création des bases de données et des utilisateurs

235

Configuration des utilisateurs et des privilèges

235

Introduction au système de privilèges de MySQL

235

Principe des privilèges minimaux

236

Configuration des utilisateurs : la commande GRANT

236

Types et niveaux des privilèges

238

La commande REVOKE

241

Exemples d’utilisation de GRANT et de REVOKE

241

Configurer un utilisateur pour le Web

242

Utiliser la bonne base de données

243

Création des tables de la base de données

244

Signification des autres mots-clés

245

Analyse des types de colonnes

246

Examiner la base de données avec SHOW et DESCRIBE

248

Création d’index

249

Identificateurs MySQL

250

Types des colonnes

251

Types numériques

251

Types de dates et d’heures

253

Types de chaînes

254

Pour aller plus loin

256

Pour la suite

256

10 Travailler avec une base de données MySQL

257

Qu’est-ce que SQL ?

257

Insertion de données dans une base de données

258

Récupération des données dans la base de données

260

Récupérer des données ayant des critères spécifiques

262

Récupérer des données dans plusieurs tables

264

Récupérer les données dans un ordre particulier

269

Groupement et agrégation des données

270

Choisir les lignes à renvoyer

272

Utiliser des sous-requêtes

273

Table des matières

XI

Mise à jour des enregistrements de la base de données

276

Modification des tables après leur création

276

Supprimer des enregistrements de la base de données

279

Supprimer des tables

279

Supprimer une base de données entière

279

Pour aller plus loin

280

Pour la suite

280

11 Accès à une base de données MySQL à partir du Web avec PHP

281

Fonctionnement des architectures de bases de données web

281

Principales étapes dans l’interrogation d’une base de données à partir du Web

285

Vérifier et filtrer les données saisies par l’utilisateur

285

Établissement de la connexion

286

Choisir une base de données à utiliser

287

Interroger la base de données

288

Récupérer les résultats de la requête

289

Déconnexion de la base de données

290

Ajouter des informations dans la base de données

290

Utiliser des instructions préparées

294

Autres interfaces PHP pour les bases de données

295

Utilisation d’une interface de base de données générique : PEAR::MDB2

296

Pour aller plus loin

298

Pour la suite

298

12 Administration MySQL avancée

299

Les détails du système des privilèges

299

La table user

301

Les tables db et host

303

Les tables tables_priv, columns_priv et procs_priv

305

Contrôle d’accès : utilisation des tables de privilèges par MySQL

306

Mise à jour des privilèges : à quel moment les modifications prennent-elles effet ?

307

Sécuriser une base de données MySQL

308

MySQL du point de vue du système d’exploitation

308

Mots de passe

308

Privilèges des utilisateurs

309

Problèmes relatifs au Web

310

Obtenir plus d’informations sur les bases de données

311

Obtenir des informations avec SHOW

311

Obtenir des informations sur les colonnes avec DESCRIBE

314

Comprendre le fonctionnement des requêtes avec EXPLAIN

314

Astuces générales d’optimisation

320

Optimisation de l’architecture

320

XII

PHP & MySQL

Permissions

320

Optimisation des tables

320

Utilisation des index

321

Utiliser des valeurs par défaut

321

Autres astuces

321

Sauvegarder votre base de données MySQL

321

Restauration de votre base de données MySQL

322

Implémenter la réplication

323

Configurer le maître

323

Réaliser le transfert de données initial

324

Configurer l’esclave ou les esclaves

325

Pour aller plus loin

325

Pour la suite

326

13 Programmation MySQL avancée

327

L’instruction LOAD DATA INFILE

327

Les moteurs de stockage

327

Les transactions

329

Comprendre la définition des transactions

329

Utiliser des transactions avec InnoDB

330

Les clés étrangères

331

Les procédures stockées

332

Un exemple simple

333

Variables locales

335

Curseurs et structures de contrôle

336

Pour aller plus loin

340

Pour la suite

340

Partie III

Sécurité

14 Sécurité des applications web

343

Stratégies de sécurité

343

Partir du bon pied

343

Trouver un équilibre entre la sécurité et la facilité d’utilisation

344

Surveiller la sécurité

345

Une approche de base

345

Identifier les menaces auxquelles nous devrons faire face

345

Accès ou modification de données confidentielles

346

Perte ou destruction des données

346

Déni de service

347

Table des matières

XIII

 

Injection de code malicieux

347

Compromission d’un serveur

348

Savoir à qui l’on a affaire

348

Les pirates

348

Utilisateurs victimes de machines infectées

348

Employés mécontents

349

Voleurs de matériel

349

Nous-mêmes

349

Sécuriser son code

349

Filtrage des données fournies par les utilisateurs

350

Protéger les sorties

354

Organiser le code

356

Contenu du code

357

Considérations sur le système de fichiers

358

Stabilité du code et bogues

359

Apostrophes d’exécution et exec

360

Sécuriser le serveur web et PHP

361

Garder les logiciels à jour

361

Lire le fichier php.ini

362

Configurer le serveur web

363

Applications web chez des hébergeurs

364

Sécuriser le serveur de base de données

365

Utilisateurs et système de permissions

366

Envoi de données au serveur

367

Connexion au serveur

367

Exécution du serveur

368

Protéger le réseau

368

Installation de pare-feux

369

Utilisation d’une DMZ

369

Préparation contre les attaques DoS et DDoS

370

Sécurité des ordinateurs et du système d’exploitation

370

Maintenir à jour le système d’exploitation

370

Ne lancer que ce qui est nécessaire

371

Sécuriser physiquement le serveur

371

Se préparer aux désastres

372

Pour la suite

373

15

Authentification avec PHP et MySQL

375

Identification des visiteurs

375

Implémenter un contrôle d’accès

377

Stockage des mots de passe

379

Chiffrement des mots de passe

381

Protéger plusieurs pages

383

XIV

PHP & MySQL

Authentification de base

384

Utiliser l’authentification de base avec PHP

385

Utiliser l’authentification de base avec les fichiers .htaccess d’Apache

387

Utiliser l’authentification mod_auth_mysql

391

Installation de mod_auth_mysql

391

Utilisation de mod_auth_mysql

392

Création d’une authentification personnalisée

393

Pour aller plus loin

393

Pour la suite

394

16 Transactions sécurisées avec PHP et MySQL

395

Transactions sécurisées

395

L’ordinateur de l’utilisateur

396

Internet

398

Votre système

399

Utilisation de SSL

400

Filtrer les données saisies

403

Stockage sécurisé

404

Stockage des numéros de cartes de crédit

406

Utilisation du chiffrement avec PHP

406

Installation de GPG

407

Pour aller plus loin

415

Pour la suite

415

Partie IV

Techniques PHP avancées

17 Interaction avec le système de fichiers et le serveur

419

Introduction au dépôt de fichiers

419

Code HTML d’un formulaire de dépôt de fichiers

421

Écriture du code PHP pour le traitement du fichier

422

Problèmes fréquents

426

Utilisation des fonctions de manipulation des répertoires

427

Lecture du contenu de répertoires

427

Obtention d’informations sur le répertoire courant

431

Création et suppression de répertoires

431

Interaction avec le système de fichiers

432

Obtention d’informations sur les fichiers

432

Modification des propriétés d’un fichier

435

Création, suppression et déplacement de fichiers

436

Utilisation de fonctions d’exécution de programmes

437

Table des matières

XV

Interaction avec l’environnement : getenv() et putenv()

439

Pour aller plus loin

440

Pour la suite

440

18 Utilisation des fonctions de réseau et de protocole

441

Vue d’ensemble des protocoles réseau

441

Envoi et réception de courriers électroniques

442

Utilisation des données d’autres sites web

443

Utilisation de fonctions de recherche réseau

445

Utilisation de FTP

450

Sauvegarde d’un fichier ou création d’un enregistrement miroir d’un fichier

450

Téléchargement de fichiers vers un serveur

457

Éviter les dépassements de délai

457

Autres fonctions FTP

457

Pour aller plus loin

458

Pour la suite

458

19 Gestion de la date et de l’heure

459

Obtention de la date et de l’heure à partir d’un script PHP

459

Utilisation de la fonction date()

459

Utilisation des étiquettes temporelles Unix

462

Utilisation de la fonction getdate()

464

Validation de dates avec checkdate()

465

Formatage des étiquettes temporelles

465

Conversion entre des formats de date PHP et MySQL

467

Calculs de dates avec PHP

469

Calculs de dates avec MySQL

471

Utiliser des microsecondes

472

Utilisation des fonctions PHP de calendrier

473

Pour aller plus loin

474

Pour la suite

474

20 Génération d’images via PHP

475

Configuration du support des images dans PHP

476

Formats graphiques

477

JPEG

477

PNG

477

WBMP

478

GIF

478

Création d’images

478

Canevas de l’image

479

Dessin ou impression de texte dans une image

480

XVI

PHP & MySQL

Production de l’image finale

482

Nettoyage final

483

Utilisation d’images produites automatiquement dans d’autres pages

483

Utilisation de texte et de polices pour créer des images

484

Définition du canevas de base

487

"Faire tenir" le texte sur le bouton

488

Positionnement du texte

491

Écriture du texte sur le bouton

492

Fin du traitement

492

Représentation graphique de données numériques

493

Autres fonctions de création et de manipulation d’images

501

Pour aller plus loin

501

Pour la suite

501

21 Utilisation du contrôle de session en PHP

503

Qu’est-ce que le contrôle de session ?

503

Fonctionnalité de base d’une session

504

Qu’est-ce qu’un cookie ?

504

Création de cookies à partir d’un script PHP

505

Utilisation des cookies avec des sessions

505

Stockage de l’ID de session

506

Implémentation d’un contrôle de session simple

506

Démarrage d’une session

506

Enregistrement des variables de session

507

Utilisation de variables de session

507

Suppression des variables et destruction de la session

508

Un exemple de session simple

508

Configuration du contrôle de session

510

Authentification avec le contrôle de session

512

Pour aller plus loin

517

Pour la suite

518

22 Autres fonctions et possibilités offertes par PHP

519

Évaluation de chaînes : eval()

519

Achèvement de l’exécution : die() et exit()

520

Sérialisation de variables et d’objets

521

Obtention d’informations sur l’environnement PHP

522

Liste des extensions chargées

522

Identification du propriétaire d’un script

523

Détermination de la date de dernière modification d’un script

523

Modification temporaire de l’environnement d’exécution

523

Table des matières

XVII

Colorisation du code source

524

Utiliser PHP en ligne de commande

525

Pour la suite

526

Partie V

Créer des projets avec PHP et MySQL

23 Utilisation de PHP et de MySQL dans des projets importants

529

Appliquer les règles du génie logiciel au développement web

529

Planification et mise en œuvre d’un projet d’application web

530

Réutilisation du code

531

Écrire du code facile à maintenir

532

Standards de programmation

532

Décomposer le code

536

Utiliser une structure standard pour vos répertoires

537

Documenter et partager les fonctions développées en interne

537

Implémenter un contrôle de versions

537

Choisir un environnement de développement

539

Documenter vos projets

539

Prototypage

540

Séparation de la logique et du contenu

541

Optimisation du code

542

Quelques optimisations simples

542

Utilisation des produits de Zend

543

Tests

543

Pour aller plus loin

545

Pour la suite

545

24 Débogage

547

Les erreurs de programmation

547

Erreurs de syntaxe

547

Erreurs en cours d’exécution

549

Erreurs de logique

555

Aide au débogage des variables

557

Les niveaux d’erreur

559

Modifier les paramètres d’affichage des erreurs

560

Déclencher vos propres erreurs

562

Gérer correctement les erreurs

562

Pour la suite

565

XVIII

PHP & MySQL

25 Authentification des utilisateurs et personnalisation

567

Composants de la solution

568

Identification des utilisateurs et personnalisation

568

Enregistrer les liens vers les sites favoris

569

Sites suggérés

569

Résumé de la solution

570

Implémentation de la base de données

572

Implémentation du site de base

573

Implémentation de l’authentification des utilisateurs

576

Enregistrement

576

Connexion

583

Déconnexion

586

Modifier les mots de passe

587

Réinitialiser les mots de passe oubliés

589

Implémentation de l’enregistrement et de la récupération des favoris

594

Ajouter des liens

594

Afficher les favoris

597

Supprimer des favoris

598

Implémentation de la suggestion de sites

600

Pour aller plus loin

604

Pour la suite

604

26 Implémentation d’un panier virtuel

605

Les composants

606

Implémenter un catalogue en ligne

606

Conserver une trace des achats effectués par l’utilisateur

606

Implémenter un système de paiement

607

Créer une interface d’administration

608

Présentation de la solution

608

Implémentation de la base de données

612

Implémentation du catalogue en ligne

615

Liste des catégories

617

Liste des livres d’une catégorie

619

Afficher les informations relatives à un livre

621

Implémentation du panier virtuel

622

Utiliser le script show_cart.php

623

Afficher le panier virtuel

626

Ajouter des articles dans le panier virtuel

628

Enregistrer le panier virtuel modifié

630

Afficher une barre d’en-tête de résumé

631

Règlement des achats

631

Implémentation du paiement

638

Implémentation d’une interface d’administration

640

Table des matières

XIX

Pour aller plus loin

648

Utilisation d’un système existant

649

Pour la suite

649

27 Implémentation d’un webmail

651

Composants de la solution

651

Les protocoles de courrier POP3 et IMAP

652

Gestion de POP3 et IMAP en PHP

652

Résumé de la solution

654

Création de la base de données

656

Architecture du script

657

Connexion et déconnexion

663

Configuration de comptes de courrier

666

Création d’un compte de courrier

668

Modifier un compte de courrier existant

670

Supprimer un compte de courrier

670

Lecture du courrier

671

Choisir un compte

671

Consulter le contenu d’une boîte aux lettres

674

Lecture d’un e-mail

676

Afficher les en-têtes d’un message

680

Suppression des messages

681

Envoyer du courrier

681

Envoyer un nouveau message

682

Répondre à un message ou le faire suivre

683

Pour aller plus loin

685

Pour la suite

686

28 Implémentation d’un gestionnaire de listes de diffusion

687

Composants de la solution

687

Configuration de la base de données

688

Transfert des fichiers

689

Envoyer des e-mails incluant des pièces jointes

689

Présentation de la solution

690

Configuration de la base de données

692

Architecture du script

694

Implémentation de la connexion

701

Création d’un nouveau compte

702

Ouvrir une session

704

Implémentation des fonctions de l’utilisateur

707

Consultation des listes

708

Affichage des informations d’une liste

713

Affichage des archives d’une liste

715

XX

PHP & MySQL

Inscriptions et désinscriptions

716

Modification des paramètres d’un compte

717

Changement des mots de passe

718

Fermeture de session

720

Implémentation des fonctions administratives

720

Création d’une nouvelle liste

721

Transfert vers le serveur d’un nouveau bulletin

723

Gestion du transfert de plusieurs fichiers

726

Prévisualisation du bulletin

730

Envoi du bulletin

731

Pour aller plus loin

736

Pour la suite

737

29 Implémentation d’un forum web

739

Comprendre le processus

739

Composants de la solution

740

Présentation de la solution

742

Conception de la base de données

743

Afficher l’arborescence des articles

746

Ouverture et fermeture des fils de discussion

749

Affichage des articles

752

Utilisation de la classe treenode

753

Afficher des articles particuliers

759

Ajouter de nouveaux articles

761

Extensions

768

Utiliser un système existant

769

Pour la suite

769

30 Production de documents personnalisés en PDF

771

Présentation du projet

771

Évaluation des formats de documents

772

Papier

772

Texte ASCII

772

HTML

773

Formats des traitements de texte

773

Rich Text Format

774

PostScript

775

Portable Document Format

776

Les composants de la solution

777

Système d’évaluation

777

Logiciel de génération des documents

777

Présentation de la solution

780

Poser les questions du QCM

781

Table des matières

XXI

Évaluation des réponses

783

Production du certificat RTF

786

Production d’un certificat PDF à partir d’un modèle

789

Production d’un document PDF avec PDFlib

793

Un script "Bonjour tout le monde" pour PDFlib

793

Production d’un certificat avec PDFlib

798

Gestion des problèmes avec les en-têtes

805

Pour aller plus loin

806

La suite

806

31 Connexion à des services web avec XML et SOAP

807

Présentation du projet : manipuler XML et les services web

807

Introduction à XML

808

Introduction aux services web

811

Composants de la solution

813

Utilisation de l’interface des services web d’Amazon

813

Analyse XML : réponses REST

814

Utilisation de SOAP avec PHP

815

Mise en cache

815

Présentation de la solution

815

Cœur de l’application

820

Affichage des livres d’une catégorie

826

La classe AmazonResultSet

828

Utilisation de REST pour effectuer une requête et récupérer un résultat

836

Utilisation de SOAP pour effectuer une requête et récupérer un résultat

842

Mise en cache des réponses à une requête

844

Construction du panier virtuel

846

Passer la commande auprès d’Amazon

850

Installation du code du projet

850

Extension du projet

851

Pour aller plus loin

851

32 Construction d’applications web 2.0 avec Ajax

853

Introduction à Ajax

854

Requêtes et réponses HTTP

854

DHTML et XHTML

856

CSS

856

Programmation côté client

858

Programmation côté serveur

858

XML et XSLT

858

Présentation d’Ajax

859

L’objet XMLHTTPRequest

859

Communication avec le serveur

861

XXII

PHP & MySQL

Utilisation de la réponse du serveur

863

Rassemblement des composants

865

Ajouter des éléments Ajax à des projets existants

868

Ajouter des éléments Ajax à PHPbookmark

869

Pour aller plus loin

882

En savoir plus sur le DOM (Document Object Model)

882

Bibliothèques JavaScript pour les applications Ajax

883

Sites consacrés au développement Ajax

883

 

Partie VI

Annexes

Annexe A

Installation de PHP et de MySQL

887

Installation d’Apache, PHP et MySQL sous Unix

888

Installation à partir de binaires

888

Installation à partir des sources

889

Installation de MySQL

890

Installation de PHP

892

Modification du fichier httpd.conf

895

Test du fonctionnement de PHP

896

Test du fonctionnement de SSL

897

Installation d’Apache, de PHP et de MySQL sous Windows

898

Installation de MySQL sous Windows

898

Installation d’Apache sous Windows

900

Installation de PHP sous Windows

902

Installation de PEAR

904

Autres configurations

905

Annexe B

Ressources web

907

Ressources PHP

907

Ressources MySQL et SQL

910

Ressources Apache

910

Développement web

910

Index

911

Introduction

Vous vous intéressez au développement web avec PHP et MySQL ? Ce livre est fait pour vous ! Vous y trouverez nos expériences les plus utiles sur PHP et MySQL, deux des plus passionnants outils de développement web du moment.

Les points forts de ce livre

Ce livre vous expliquera comment créer des sites web interactifs, de leur expression la plus simple à des sites interactifs du Web 2.0 en passant par les sites de commerce élec- tronique sécurisés et complexes. Vous apprendrez également à vous servir des technologies open-source.

Ce livre est destiné aux lecteurs qui connaissent déjà au minimum les bases du langage HTML et ont l’habitude de programmer dans un langage de programmation moderne, mais qui ne connaissent pas nécessairement la programmation sur Internet ou les bases de données relationnelles. Si vous êtes un programmeur débutant, ce livre devrait également vous intéresser, mais il vous faudra peut-être un peu plus de temps pour l’assimiler. Nous avons essayé de n’oublier aucun concept fondamental, toutefois, certains d’entre eux seront présentés assez rapidement. Ce livre est donc principalement destiné aux lecteurs qui souhaitent maîtriser PHP et MySQL pour implémenter un site web commercial ou de qualité professionnelle. Si vous utilisez déjà un langage de développement pour le Web, cet ouvrage devrait vous mettre rapi- dement sur la bonne voie.

Nous avons écrit la première édition de ce livre lorsque nous nous sommes rendu compte que tous les ouvrages existants consacrés à PHP se limitaient à une simple énumération de ses fonctions. Ces livres sont naturellement très utiles, mais ils ne sont d’aucune aide lorsque votre patron ou un client vous demande : "Implémentez-moi un panier virtuel pour mon site de commerce électronique." Nous avons fait de notre mieux pour que tous nos exemples soient aussi utiles que possible. La plupart des programmes peuvent être utilisés directement sur votre site web ; les autres ne nécessi- teront que quelques modifications mineures.

2

PHP & MySQL

Ce que vous apprendrez en lisant ce livre

Si vous avez déjà implémenté des sites web en HTML pur, vous avez déjà compris les limites de cette approche : ils sont tout simplement trop statiques. Ils restent identiques jusqu’à ce que vous les mettiez à jour vous-même. En outre, les utilisateurs ne peuvent pas interagir avec ce type de site, en tout cas de manière intéressante.

L’utilisation d’un langage comme PHP et d’une base de données comme MySQL permet de rendre vos sites dynamiques : ils pourront alors être personnalisés et mis à jour en temps réel.

Dès les premiers chapitres, nous nous sommes délibérément concentrés sur des applications réelles et pratiques. Nous commencerons par étudier un système simple de commande en ligne, et nous continuerons avec les différentes parties de PHP et de MySQL.

Nous aborderons ensuite différents aspects du commerce électronique et de la sécurité, puisqu’il s’agit de deux composants importants des sites web, et nous montrerons comment les implémenter avec PHP et MySQL.

Dans la dernière section de ce livre, nous verrons comment attaquer le développement de projets réels et passerons en revue la conception, la planification et l’implémentation des projets suivants :

m

authentification des utilisateurs et personnalisation d’un site ;

m

paniers virtuels ;

m

systèmes de messagerie web ;

m

gestionnaires de listes de diffusion ;

m

forums web ;

m

production de documents PDF ;

m

services web avec XML et SOAP ;

m

applications web 2.0 avec Ajax.

Tous ces projets sont utilisables tels quels ou peuvent être modifiés en fonction de vos besoins. Nous les avons choisis parce que nous pensons qu’ils sont représentatifs des applications web auxquelles les programmeurs sont le plus souvent confrontés. Si vos besoins sont différents, ce livre devrait toutefois vous aider à atteindre vos objectifs.

Présentation de PHP

PHP est un langage de script côté serveur qui a été conçu spécifiquement pour le Web. Le code PHP est inclus dans une page HTML et sera exécuté à chaque fois qu’un visiteur

Introduction

3

affichera la page. Le code PHP est interprété au niveau du serveur web et génère du code HTML ou toute autre donnée affichable dans le navigateur de l’utilisateur.

PHP a été conçu en 1994 par Rasmus Lerdorf. Il a ensuite été adopté par d’autres personnes talentueuses et réécrit quatre fois avant de devenir le produit abouti que nous connaissons aujourd’hui. En novembre 2007, il était installé sur plus de 21 millions de domaines et sa croissance est rapide. Vous trouverez des statistiques plus récentes sur le site http://www.php.net/usage.php.

PHP est un projet open-source, ce qui signifie que vous pouvez vous procurer son code, l’utiliser, le modifier et le redistribuer gratuitement.

PHP signifiait à l’origine Personal Home Page, mais ce nom a été changé en un acro- nyme récursif comme GNU (Gnu’s Not Unix) : il signifie maintenant PHP Hypertext Preprocessor.

La dernière version principale de PHP est la version 5. Elle bénéficie d’une réécriture complète du moteur Zend et de quelques améliorations importantes au niveau du langage.

La page d’accueil de PHP est accessible à l’adresse http://www.php.net.

La page de Zend Technologies, l’entreprise des fondateurs de PHP, se trouve à l’adresse http://www.zend.com.

Présentation de MySQL

MySQL est un système de gestion de bases de données relationnelles (SGBDR) robuste et rapide. Une base de données permet de manipuler les informations de manière effi- cace, de les enregistrer, de les trier, de les lire et d’y effectuer des recherches. Le serveur MySQL contrôle l’accès aux données pour s’assurer que plusieurs utilisateurs peuvent se servir simultanément d’une même base de données pour y accéder rapidement et pour garantir que seuls les utilisateurs autorisés peuvent accéder aux données. MySQL est donc un serveur multi-utilisateur et multithread. Il utilise SQL (Structured Query Language), le langage standard des requêtes de bases de données. MySQL est disponi- ble depuis 1996, mais son développement remonte à 1979. Il s’agit de la base de données open-source la plus employée au monde et elle a reçu le Linux Journal Readers’ Choice Award à plusieurs reprises.

MySQL est désormais disponible sous une double licence. Vous pouvez l’utiliser gratuitement sous licence open-source (GPL) à condition de respecter les termes de cette licence. Si vous souhaitez distribuer une application non GPL incluant MySQL, vous pouvez aussi acheter une licence commerciale.

4

PHP & MySQL

Pourquoi utiliser PHP et MySQL ?

Lors de l’implémentation d’un site web, vous avez le choix entre de nombreux produits.

Vous devez notamment choisir :

m

la plate-forme matérielle du serveur web ;

m

un système d’exploitation ;

m

un logiciel de serveur web ;

m

un système de gestion de base de données ;

m

un langage de programmation ou de script.

Certains de ces choix dépendent directement des autres. Tous les systèmes d’exploitation ne fonctionnent pas sur toutes les plates-formes ; par exemple, tous les serveurs web ne reconnaissent pas tous les langages de programmation, etc.

Dans ce livre, nous ne nous intéresserons pas particulièrement au matériel, à votre système d’exploitation ou à votre logiciel de serveur web. Nous n’en avons pas besoin car l’une des caractéristiques intéressantes de PHP et de MySQL tient à ce qu’ils fonc- tionnent avec tous les systèmes d’exploitation les plus connus et avec la plupart des autres.

Un script PHP peut, dans la plupart des cas, être écrit de façon à être portable entre les systèmes d’exploitation et les serveurs web. Certaines fonctions sont directement liées aux spécificités d’un système de fichiers particulier, mais elles sont clairement identifiées comme telles dans le manuel de référence et dans ce livre.

Quels que soient votre plate-forme, votre système d’exploitation ou votre serveur web, nous pensons que PHP et MySQL sont des options très intéressantes.

Quelques avantages de PHP

Les principaux concurrents de PHP sont Perl, ASP.NET de Microsoft, Ruby (avec ou sans Rails), Java Server Pages (JSP) et ColdFusion.

Par rapport à tous ces produits, PHP possède plusieurs avantages significatifs :

m

les performances ;

m

l’adaptabilité ;

m

des interfaces vers différents systèmes de bases de données ;

Introduction

5

m

des bibliothèques intégrées pour la plupart des tâches web ;

m

un faible coût ;

m

la simplicité d’utilisation et d’apprentissage ;

m

un bon support orienté objet ;

m

la portabilité ;

m

la souplesse dans le processus de développement ;

m

la disponibilité de son code source ;

m

la disponibilité du support et de la documentation.

Performances

PHP est très rapide. Avec un seul serveur d’entrée de gamme, vous pouvez servir des millions de requêtes par jour. Les tests de performances publiés par Zend Technologies (http://www.zend.com) montrent que PHP dépasse tous ses concurrents.

Adaptabilité

PHP utilise ce que Rasmus Lerdorf désigne souvent comme une architecture "sans partage". Cela signifie que vous pouvez implémenter de façon efficace et à peu de frais une ferme de serveurs en ajoutant des machines en fonction de vos besoins.

Intégration avec les bases de données

PHP dispose de connexions natives vers la plupart des systèmes de bases de données. Outre MySQL, vous pouvez vous connecter directement aux bases de données PostgreSQL, Oracle, dbm, FilePro, DB2, Informix, InterBase et Sybase, pour ne citer qu’elles. PHP 5 possède également une interface SQL intégrée, SQLite, pour gérer les fichiers plats.

En fait, grâce au standard ODBC (Open Database Connectivity), vous pouvez vous connecter à n’importe quelle base de données possédant un pilote ODBC, ce qui est le cas des produits Microsoft, notamment.

Outre ces bibliothèques natives, PHP dispose d’une couche d’abstraction pour l’accès aux bases de données : PDO (PHP Database Objects) autorise ainsi une certaine cohé- rence et facilite la prise en compte de la sécurité lors de l’accès aux bases.

Bibliothèques intégrées

PHP ayant été conçu pour être utilisé sur le Web, il possède de nombreuses fonc- tions intégrées permettant d’effectuer la plupart des tâches de programmation web.

6

PHP & MySQL

Vous pouvez ainsi générer des images en temps réel, vous connecter à des services web et à d’autres services réseaux, analyser des documents XML, envoyer du courrier électronique, manipuler les cookies et produire des documents PDF avec seulement quelques lignes de code.

Coût