• Aucun résultat trouvé

PHP La bible

N/A
N/A
Protected

Academic year: 2022

Partager "PHP La bible"

Copied!
1440
0
0

Texte intégral

(1)
(2)

Copyright © 2005 Micro Application

20-22, rue des Petits-Hôtels 75010 Paris

1èreÉdition - Janvier 2005

Auteurs Laurent GUÉDON, Damien HEUTE, Thomas HEUTE et Pierre-Emmanuel MULLER Toute représentation ou reproduction, intégrale ou partielle, faite sans le consentement de MICRO APPLICATION est illicite (article L122-4 du code de la propriété intellectuelle).

Cette représentation ou reproduction illicite, par quelque procédé que ce soit, constituerait une contrefaçon sanctionnée par les articles L335-2 et suivants du code de la propriété intellectuelle.

Le code de la propriété intellectuelle n’autorise aux termes de l’article L122-5 que les repro- ductions strictement destinées à l’usage privé et non destinées à l’utilisation collective d’une part, et d’autre part, que les analyses et courtes citations dans un but d’exemple et

d’illustration.

Avertissement Les informations contenues dans cet ouvrage sont données à titre indicatif et n’ont aucun aux utilisateurs caractère exhaustif voire certain. A titre d’exemple non limitatif, cet ouvrage peut vous pro-

poser une ou plusieurs adresses de sites Web qui ne seront plus d’actualité ou dont le contenu aura changé au moment où vous en prendrez connaissance.

Aussi, ces informations ne sauraient engager la responsabilité de l’Editeur. La société MI- CRO APPLICATION ne pourra être tenue responsable de toute omission, erreur ou lacune qui aurait pu se glisser dans ce produit ainsi que des conséquences, quelles qu’elles soient, qui résulteraient des informations et indications fournies ainsi que de leur utilisation.

ISBN : 2-7429-3608-4

Tous les produits cités dans cet ouvrage sont protégés, et les marques déposées par leurs titulaires de droits respectifs.

Cet ouvrage n’est ni édité, ni produit par le(s) propriétaire(s) de(s) programme(s) sur le(s)quel(s) il porte.

Couverture réalisée par Stefanos ATHANASSOPOULOS

MICRO APPLICATION Support technique

20-22, rue des Petits-Hôtels disponible sur

75010 PARIS www.microapp.com

Tél. : 01 53 34 20 20 - Fax : 01 53 34 20 00 http://www.microapp.com

Mister O’net, l’homme à la référence, vous montre le chemin ! Rendez-vous sur le siteInternet de Micro Application

www.microapp.com. Dans le module de recherche, sur la page d’accueil du site, retrouvezMister O’net. Dans la zone de saisie, entrez la référence à 4 chiffres qu’il vous indique sur le présent livre.

Vous accédez directement à la fiche produit de ce livre.

4608

(3)

La collectionBible Micro Application a été conçue pour permettre aux utilisateurs avancés à experts d’approfondir leurs connaissances d’un thème précis. Exhaustifs, ces ouvrages permettent d’acquérir une connaissance intégrale du sujet étudié, à la fois en théorie et en pratique.

Conventions typographiques

Afin de faciliter la compréhension des techniques décrites, nous avons adopté les conventions typographiques suivantes :

j gras: menu, commande, boîte de dialogue, bouton, onglet.

j italique: zone de texte, liste déroulante, case à cocher, bouton radio.

j Police bâton: instruction, listing, texte à saisir.

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

Au cours de votre lecture, vous rencontrerez les encadrés suivants :

Propose des trucs pratiques.

Met l’accent sur un point important qu’il ne faut négliger à aucun prix.

Mentionne un fichier exemple ou un programme disponible sur le CD d’accompagnement de l’ouvrage.

Vous recommande une technique ou une marche à suivre.

(4)

Renvoi à un site où vous trouverez des infos complémentaires ou des outils à télécharger.

Il s’agit d’informations supplémentaires relatives au sujet traité.

Fait référence à un chapitre où vous trouverez des informations complémentaires.

(5)

Chapitre 1 Introduction 25

Chapitre 2 Prise en main 49

Chapitre 3 Le langage PHP 111

Chapitre 4 Les en-têtes HTTP 251

Chapitre 5 Les techniques de programmation 295

Chapitre 6 Les fonctions mathématiques 325

Chapitre 7 La manipulation des chaînes de caractères 353 Chapitre 8 La gestion des dates et des calendriers 433 Chapitre 9 La gestion des fichiers et des répertoires 485

Chapitre 10 L’utilisation des bases de données 633

Chapitre 11 Les annuaires LDAP 901

Chapitre 12 La messagerie : envoi et lecture de mails 959

Chapitre 13 Les images et les animations Flash 1021

Chapitre 14 La création de documents PDF 1137

Chapitre 15 L’utilisation de XML 1185

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

Chapitre 17 Les processus et les identifiants 1309

Chapitre 18 L’interopérabilité avec COM 1325

Chapitre 19 L’optimisation des temps de réponse 1339 Chapitre 20 L’obfuscation : Distribuer ses scripts sans dévoiler son code 1379 Chapitre 21 Annexe A : des exemples d’applications 1393 Chapitre 22 Annexe B : les en-têtes HTTP et les variables externes 1419

Chapitre 23 Annexe C : les erreurs HTTP 1425

(6)
(7)

Chapitre 1

Introduction . . . 25

À quoi sert PHP ? . . . 27

Présentation, rôle et fonctionnement d’un langage de script . . . 27

Les version 1 à 5 de PHP . . . 29

Rasmus Lerdorf . . . 29

Naissance et évolution de PHP . . . 30

La création de la communauté . . . 34

La communauté du libre . . . 35

Historique . . . 35

La machine en marche . . . 36

Cathédrale et bazar . . . 37

La scission : l’Open Source . . . 37

Le droit et les logiciels libres . . . 38

PHP et le libre . . . 39

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

PHP face aux autres langages de script web . . . 40

Comparatif PHP/Perl . . . 41

Comparatif PHP/ASP . . . 41

Comparatif PHP/JSP . . . 42

Perspectives . . . 44

En bref . . . 44

Pourquoi ont-ils choisi PHP ? . . . 45

Ils ont choisi PHP . . . 45

PHP à l’assaut du Net . . . 47

Chapitre 2 Prise en main . . . 49

Installation . . . 51

Avec Apache . . . 51

Avec IIS . . . 76

Avec iPlanet . . . 78

Le fichier de configuration php.ini . . . 84

Options PHP de base . . . 85

(8)

Gestion des fichiers . . . 90

Gestion des données . . . 91

Les magic quotes . . . 91

Sessions . . . 92

Génération du document . . . 94

Gestion de l’affichage . . . 95

Extensions dynamiques . . . 96

Configuration des extensions . . . 96

Divers . . . 97

Les éditeurs et débogueurs PHP . . . 97

L’artillerie lourde . . . 98

Les spécialistes . . . 101

Dreamweaver et GoLive . . . 108

Chapitre 3 Le langage PHP . . . 111

Intégrer le code PHP au HTML . . . 113

Les balises . . . 113

Mon premier script . . . 114

Les commentaires . . . 116

Les constantes . . . 117

Les variables . . . 118

Définition et syntaxe . . . 118

Les variables dynamiques . . . 119

Les types . . . 120

Les variables externes . . . 130

Les opérateurs . . . 140

Arithmétiques . . . 140

Binaires . . . 141

Chaînes de caractères . . . 142

Affectation . . . 142

Incrémentation et décrémentation . . . 143

Comparaison . . . 144

Logique . . . 145

Contrôles d’erreur . . . 145

Exécution . . . 147

Priorités . . . 147

Les structures de contrôle . . . 148

If, else, elseif . . . 148

While, do while . . . 152

For, foreach . . . 153

Switch . . . 156

Sommaire

(9)

Break, continue . . . 157

Les fonctions . . . 158

La syntaxe . . . 159

La portée des variables . . . 160

Le passage des paramètres . . . 163

Les paramètres par défaut . . . 163

Le passage de paramètres par référence . . . 166

Retourner une valeur . . . 167

Manipuler des fonctions . . . 168

La récursivité des fonctions . . . 173

Les tableaux . . . 174

Les valeurs d’un tableau . . . 175

Initialisation d’un tableau . . . 175

Les subtilités d’initialisation d’un tableau . . . 176

Remplissage d’un tableau . . . 177

Les fonctions de manipulation des tableaux . . . 178

Les inclusions de fichiers . . . 206

Inclusions multiples . . . 209

Les noms des fichiers inclus . . . 210

Les fichiers insérés distants . . . 210

Le passage de paramètres . . . 211

Les chemins relatifs . . . 211

Cas d’erreur et code retour . . . 213

Un cas d’utilisation pratique mais potentiellement dangereux . . . 214

Les classes, les objets . . . 216

Définir une classe . . . 219

Les constructeurs . . . 220

Les attributs . . . 221

Les méthodes . . . 223

L’héritage . . . 227

Les interfaces . . . 233

Les classes abstraites . . . 234

Les exceptions . . . 235

Les fonctions de manipulation des objets . . . 238

Programmation avancée . . . 241

Les tableaux en POO . . . 246

Chapitre 4 Les en-têtes HTTP . . . 251

Principe général . . . 253

(10)

Déclaration du type MIME . . . 260

Gestion des caches (des navigateurs) . . . 261

Cookies . . . 261

Généralités . . . 262

En PHP . . . 264

Exemple utilisant des cookies . . . 266

Sessions . . . 271

Exemple utilisant des sessions . . . 274

Stockage personnalisé des variables de sessions . . . 277

Clore une session . . . 283

Les autres fonctions . . . 283

Les fonctions historiques . . . 287

Mise en cache avant émission des données . . . 287

Les fonctions de base . . . 287

Compression des données . . . 289

Optimisation des temps de réponse . . . 290

Gestion du cache interne . . . 292

Les autres fonctions . . . 293

Chapitre 5 Les techniques de programmation . . . 295

Règles de codage . . . 297

Présentation du code . . . 297

Programmation . . . 299

Noms de classes, fonctions, variables et constantes . . . 299

Commentaires . . . 301

Séparation du code et de la mise en page . . . 307

Utilisation des objets et de l’instruction include . . . 307

Utilisation des modèles (templates) . . . 309

Chapitre 6 Les fonctions mathématiques . . . 325

Les fonctions mathématiques et les constantes . . . 327

Constantes . . . 327

Fonctions . . . 328

Calculs de précision . . . 348

Installation . . . 348

Utilisation . . . 349

Chapitre 7 La manipulation des chaînes de caractères . . . 353

Sommaire

(11)

Généralités . . . 355

Afficher du texte . . . 357

Manipuler les caractères . . . 363

Fonctions de gestion des chaînes de caractères . . . 363

Extraction et substitution . . . 363

Fonctions statistiques (longueur et nombre d’occurrences) . . . 370

Fonctions de position . . . 375

Comparaison de chaînes de caractères . . . 376

Comparaison par ordre alphabétique . . . 377

Comparaison orthographique . . . 381

Comparaison phonique . . . 383

Gestion des caractères spéciaux . . . 385

Ajout du caractère d’échappement . . . 385

Suppression du caractère d’échappement . . . 386

Conversion des caractères en code HTML . . . 388

Conversion d’un alphabet à un autre . . . 394

Manipulation des balises HTML . . . 395

Suppression des espaces . . . 397

Modification de casse . . . 399

Insertion de motifs . . . 401

Fusion et découpe . . . 402

Autres... . . . 405

Somme de contrôle et cryptage . . . 407

Expressions régulières . . . 409

Perl . . . 409

Posix . . . 421

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

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

Les fonctions de date et heure . . . 435

Récupérer une date au "format informatique" . . . 435

Effectuer des opérations sur les dates . . . 436

Afficher des dates . . . 437

Les heures GMT . . . 442

Les microsecondes . . . 442

Autres fonctions . . . 443

Les dates et calendriers particuliers . . . 444

Installation . . . 444

(12)

Les gestionnaires d’événements . . . 449

Chapitre 9 La gestion des fichiers et des répertoires . . . 485

Le système de fichiers POSIX . . . 487

Accéder au système de fichiers du serveur . . . 490

Lire et écrire le contenu d’un fichier . . . 490

Lister le contenu d’un dossier . . . 518

Manipulation de fichiers et répertoires . . . 526

Upload de fichiers . . . 532

Encore plus de fonctions d’accès au système de fichiers du serveur . . . 538

Exemple d’application . . . 564

Lecture sur un "pipe" . . . 574

Compression . . . 575

Les streams ou les flux . . . 593

Installation . . . 593

Les gestionnaires disponibles . . . 593

Les filtres . . . 597

Contexte de ressource . . . 601

Travailler avec les flux . . . 607

Ajouter des gestionnaires . . . 609

Chapitre 10 L’utilisation des bases de données . . . 633

Introduction aux bases de données . . . 635

Introduction au langage SQL . . . 636

Le typage . . . 636

Les contraintes . . . 636

Les relations entre tables . . . 636

Clés primaires et compteurs . . . 639

Index . . . 639

Le langage SQL . . . 639

Création/suppression d’une base de données . . . 640

Les types . . . 640

Création/suppression d’une table . . . 643

Ajouter des données . . . 645

Mettre à jour des données . . . 646

Supprimer des données . . . 647

Lire des données . . . 648

Récupérer des informations sur une base . . . 651

Accéder à une base de données via PHP . . . 652

Sommaire

(13)

Introduction . . . 652

Couches d’abstraction . . . 654

ODBC . . . 654

Présentation de l’application d’exemple . . . 654

Le modèle de données . . . 657

Le contrôleur . . . 661

Les vues . . . 677

Access (MS) . . . 683

Installation . . . 683

Utilisation . . . 686

DB2 (IBM) . . . 687

Installation . . . 687

Utilisation . . . 690

MySQL . . . 690

Installation . . . 691

Utilisation . . . 699

Exemples d’applications . . . 714

En savoir plus... . . 723

ODBC . . . 730

Installation . . . 730

Utilisation . . . 731

Exemples d’applications . . . 745

En savoir plus... . . 754

Oracle . . . 761

Installation . . . 761

Utilisation . . . 775

Mise à profit des requêtes préparées . . . 790

Utilisation des objets de grande taille (BLOB, CLOB) . . . 792

Gestion des erreurs . . . 797

Exemples d’applications . . . 800

En savoir plus . . . 810

SQLite . . . 812

Installation . . . 812

Utilisation . . . 813

Exemples d’applications . . . 824

En savoir plus... . . 833

SQL Server (MS) . . . 836

Installation . . . 836

Utilisation . . . 844

Exemples d’applications . . . 859

(14)

Pear DB . . . 872

Chapitre 11 Les annuaires LDAP . . . 901

Le schéma LDAP . . . 905

Installation . . . 905

Installation du serveur OpenLDAP . . . 905

Installation du module LDAP pour PHP . . . 907

L’interrogation de LDAP avec PHP . . . 908

Connexion, authentification et déconnexion sur le serveur LDAP . . . 908

Opérations sur un annuaire LDAP . . . 910

Recherche dans un annuaire LDAP . . . 918

Gestion des erreurs . . . 933

Opération sur le Distinguished Name (DN) . . . 934

Opération sur les options . . . 936

Exemple d’application . . . 938

L’authentification sur l’annuaire . . . 939

L’ajout d’une nouvelle entrée . . . 944

Recherche dans l’annuaire . . . 947

Modification d’une entrée . . . 949

Réalisation d’un arbre de navigation LDAP . . . 952

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

E-mail . . . 961

Installation . . . 961

Envoyer un e-mail simple . . . 962

Type MIME . . . 965

Envoyer un e-mail au format HTML . . . 965

Envoyer un e-mail avec fichiers attachés . . . 966

Envoyer un e-mail multi-part . . . 968

Envoyer un e-mail HTML avec des images . . . 972

Accéder à son compte messagerie IMAP, POP3 ou NNTP . . . 974

Installation . . . 975

Connexion et déconnexion à un serveur . . . 976

Sélection d’une boîte à lettres . . . 979

Aperçu du contenu de la boîte à lettres . . . 983

Lecture des en-têtes . . . 986

Lecture des messages . . . 995

Recherche et tri des messages . . . 1000

Modification des drapeaux et suppression des messages . . . 1002

Ajout et déplacement de messages . . . 1004

Sommaire

(15)

Inscription/désinscription à un serveur de nouvelles . . . 1005

Identifiants . . . 1006

Composition et décomposition d’adresses e-mail . . . 1006

Génération et envoi de mails . . . 1008

Coder / décoder . . . 1009

Gérer les erreurs . . . 1011

Application d’exemple : le webmail . . . 1012

Administration des boîtes à lettres . . . 1017

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

Images (utilisation de la bibliothèque GD) . . . 1023

Installation . . . 1023

Définition de l’image de base . . . 1026

Du texte dans les images . . . 1041

Dessiner des formes géométriques . . . 1053

Utiliser les couleurs . . . 1065

Copier des parties d’image . . . 1065

Taille d’une image . . . 1072

Un exemple : l’histogramme . . . 1073

Récupérer des informations sur un fichier image . . . 1078

Récupérer des informations EXIF sur un fichier image . . . 1078

Les animations Flash . . . 1082

Installation . . . 1083

Utilisation . . . 1084

Chapitre 14 La création de documents PDF . . . 1137

Installation . . . 1139

Créer la base d’un document PDF . . . 1140

Préciser les attributs (mots-clés) du document . . . 1144

Préciser les paramètres de la page . . . 1144

Afficher du texte . . . 1146

Dessiner des formes géométriques . . . 1152

Modifier les paramètres du tracé . . . 1157

Inclure une image . . . 1163

Ajouter des liens et des annotations . . . 1166

Ajouter des fichiers attachés et aperçus (thumbnails) . . . 1170

(16)

Créer un modèle . . . 1178

Chapitre 15 L’utilisation de XML . . . 1185

Introduction . . . 1187

Présentation du langage XML . . . 1187

Le format XML . . . 1187

Exemple de document XML . . . 1189

Utilisation des documents XML . . . 1191

Installation . . . 1192

Les parseurs . . . 1192

Le parseur SAX . . . 1192

Le parseur DOM . . . 1215

Le parseur SimpleXML . . . 1232

XSLT . . . 1241

Présentation . . . 1241

Les transformations de documents XML . . . 1243

Génération de messages XML . . . 1254

Les messages WDDX . . . 1254

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

Fonctions réseau (de base) . . . 1265

Réseau . . . 1265

Adresses IP et DNS . . . 1265

Protocoles et services . . . 1269

Les sockets . . . 1270

FTP . . . 1275

Installation . . . 1275

Les fonctions de base . . . 1276

Exemple d’application . . . 1281

Autres fonctions . . . 1286

CURL (client URL Library) . . . 1288

Installation . . . 1289

Utilisation . . . 1290

Exemples d’applications . . . 1295

SOAP . . . 1299

Installation . . . 1303

Utiliser les classes PEAR . . . 1303

Interroger Google via PHP . . . 1304

Sommaire

(17)

Chapitre 17

Les processus et les identifiants . . . 1309

Exécution d’un programme . . . 1311

POSIX . . . 1313

Chapitre 18 L’interopérabilité avec COM . . . 1325

COM . . . 1327

Installation . . . 1327

Utilisation . . . 1327

Chapitre 19 L’optimisation des temps de réponse . . . 1339

Introduction . . . 1341

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

Configuration matérielle . . . 1342

Pages testées . . . 1343

Instrument de mesure . . . 1345

Présentation des mesures . . . 1345

En l’absence de solution d’optimisation . . . 1346

Mesures . . . 1346

Avec Zend Optimizer . . . 1349

Description . . . 1349

Installation . . . 1350

Mesures . . . 1354

Conclusion . . . 1357

Avec Alternative PHP Cache (APC) . . . 1358

Description . . . 1358

Installation . . . 1358

Mesures . . . 1359

Conclusion . . . 1362

Avec PHP Accelerator (PHPA) . . . 1362

Description . . . 1362

Installation . . . 1363

Mesures . . . 1363

Conclusion . . . 1366

Avec Zend Accelerator (Zend Performance Suite) . . . 1366

Description . . . 1366

Installation . . . 1367

(18)

Conclusion sur les solutions "bas niveau" (modules PHP) . . . 1376

Les solutions "haut niveau" (programmation PHP) . . . 1377

Conclusion . . . 1378

Chapitre 20 L’obfuscation : Distribuer ses scripts sans dévoiler son code . . . 1379

Introduction . . . 1381

Avec Zend Encoder . . . 1381

Installation . . . 1382

Utilisation . . . 1386

Conclusion . . . 1388

Avec ionCube PHP Encoder . . . 1388

Installation . . . 1389

Utilisation . . . 1389

Avec PHP guardian . . . 1389

Avec POBS . . . 1390

Installation . . . 1390

Utilisation . . . 1390

Conclusion . . . 1392

Autres . . . 1392

Chapitre 21 Annexe A : des exemples d’applications . . . 1393

Administration de bases de données . . . 1395

phpMyAdmin . . . 1395

Autres . . . 1400

Création de sites . . . 1401

PHPNuke . . . 1401

SPIP . . . 1405

Autres . . . 1407

Forums de discussion . . . 1407

PHPbb . . . 1407

Phorum : un moteur de forums . . . 1409

Autres . . . 1411

Annuaires de liens . . . 1412

Netref . . . 1412

Autres . . . 1413

Solutions de travail collaboratif . . . 1413

Moregroupware . . . 1413

Autres . . . 1416

Sommaire

(19)

Graphiques . . . 1416 JPGraph . . . 1416

Chapitre 22

Annexe B : les en-têtes HTTP et les variables externes . . . 1419 Chapitre 23

Annexe C : les erreurs HTTP . . . 1425

(20)

Laurent GUEDON

Je dédie ce livre à tous mes amis et plus particulièrement...

j À Philippe, Amiel (les compétences) et l’équipe de Felix ainsi qu’à la société Cyberbrain (mon couffin) ;

j À Myriam, si adorable ;

j À mes parents pour leur soutien ; j À la winwin team, Zou et Syl.

Damien HEUTE

Parce qu’il y a des choses plus faciles à écrire qu’à dire, je dédie ce livre :

j À mes parents que j’aime et qui m’ont toujours apporté un soutien indéfectible ;

j À mes frères et à mon neveu qui peut-être, un jour, s’intéressera à la version 2015 de PHP ;

j À mes collègues qui par leur bonne humeur leur et professionnalisme m’ont beaucoup appris durant ma première expérience professionnelle ;

j À mes amis que j’ai un peu délaissés pour écrire ce livre.

Thomas HEUTE

Je dédie l’énergie apportée dans ce livre :

j À mes parents et frères que j’ai peu vus durant la dernière année ;

j Mon filleul Adrien, star du chapitre sur GD, et qui a encore le temps avant d’apprendre le PHP ;

j Mes amis de France et des États-Unis, que j’ai quelque peu délaissés (I’d like to thank my US friends and to apologize about having been so busy. By the way, we’ll keep in touch) ; j Aux membres actifs de l’ESIAL Roller Dream Team 1999-2000.

Pierre-Emmanuel MULLER

Merci à Amiel, Sylviane, Pierre, Régis Priqueler (http://www.aizenko.com) et Steph’ Pineau (http://steph.pineau.free.fr/php/).

(21)

À qui s’adresse ce livre ?

Ce livre a été écrit avec, en constante toile de fond, les attentes des lecteurs à l’égard de ce que doit être la Bible d’un langage de programmation ; à savoir qu’elle doit pouvoir répondre aux interrogations du novice comme à celles de l’utilisateur expérimenté.

Une brève histoire du PHP, ainsi qu’une introduction à la philosophie du logiciel libre, vous montreront qu’autant PHP aide au développement de l’Internet autant Internet contribue à l’évolution de PHP et offre quantité de ressources qui lui sont liées. Les débutants ne seront pas laissés sur le bord du chemin dès les premières pages puisque les différentes possibilités d’installation de PHP font l’objet d’un chapitre complet et détaillé où les principaux éditeurs du marché sont également passés en revue.

De très nombreux aspects de PHP sont couverts dans cet ouvrage et la majeure partie des fonctions présentées sont illustrées par des exemples mettant bien en avant leur utilisation et comportement. Voilà pourquoi ce livre est plus qu’une simple documentation de base. Le PHP est replacé dans une optique d’apprentissage, ainsi que dans une idée d’utilisation au quotidien.

Le lecteur apprendra vite à produire des formulaires, à créer des images, à manipuler des fichiers ainsi que des bases de données, ou encore à envoyer des e-mails. Le novice sera pris par la main pour qu’aucune zone d’ombre ne puisse subsister.

Même si la présentation de la programmation procédurale n’est pas délaissée, ce qui peut vous permettre de tirer partie de ce livre si vous restez attachés à la version 4 de PHP, la programmation orientée objet est bien évidemment présentée minutieusement afin de tirer pleinement partie de PHP5.

Une fois acquis les premiers rudiments, l’utilisateur devenu initié, trouvera dans ce livre de quoi aller plus avant dans sa maîtrise du PHP. Il pourra apprendre à utiliser des bases de données professionnelles ainsi que les annuaires LDAP. Il pourra manipuler les documents XML, créer des animations flash ou des fichiers PDF, accéder aux fonctionnalités réseau dont SOAP voire utiliser PHP en conjonction avec COM. Enfin, pour une utilisation véritablement professionnelle, il aura tout intérêt à consulter les comparatifs de solutions d’optimisation et d’obfuscation du code.

Comme le démontrent les témoignages d’utilisateurs qui ont fait le choix du langage PHP, bien qu’historiquement créé pour les besoins d’une page "perso", PHP a désormais sa place dans le monde de l’entreprise.

Les auteurs

Les quatre auteurs de cette Bible disposent tous d’une expérience différente de PHP. Venant d’horizons divers, ils ont tenu à mettre en commun leurs approches pour balayer le maximum d’aspects relatifs au PHP.

(22)

Damien HEUTE

Né en 1972, ingénieur E.N.S.P.S. (École nationale supérieure de physique de Strasbourg), spécialité traitement d’images, Damien a travaillé trois ans et demi en tant qu’ingénieur étude et développement pour un grand groupe européen d’aéronautique et de défense. Il y a mis en œuvre les technos C, C++/CORBA, Java, et, dans une moindre mesure, des technologies relatives à l’Internet et aux bases de données professionnelles. Il a ensuite passé dix mois en tant qu’ingénieur étude et développement pour une start-up spécialisée dans l’aide à la navigation via Internet sur des supports "sans fil", où il a mis en œuvre des technologies Java et JSP/Servlet.

Maintenant dans un grand groupe français acteur majeur de la téléphonie mobile, de la biométrie et de la défense, il conçoit et développe, dans le cadre de gros projets, des applications web basées sur le langage Java.

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

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

Thomas HEUTE

Né en 1977, il a suivi ses études à l’ESIAL (École supérieure d’informatique et applications de Lorraine) et possède de nombreuses compétences dans le domaine informatique. Thomas connaît bien les systèmes Windows, Linux ou UNIX. Les langages dans lesquels il est le plus à l’aise sont Java et PHP. Il maîtrise également de nombreuses bases de données, ainsi que des outils de conception de logiciels (UML ou MERISE).

Il a travaillé trois ans au National Institute of Standards and Technology (USA), où il a effectué des recherches sur la sécurité et les PDA après avoir travaillé sur les systèmes d’enregistrement d’objets par XML (ebXML).

Il est également à l’origine du sitehttp://www.toutestfacile.com, site à vocation d’enseignement du PHP, du SQL et du XML.

Il s’investit dans le développement Open Source avec "Nukes the JBoss Portal" en Java/J2ee.

Il aime la batterie, la guitare et la photographie mais surtout l’informatique.

Laurent GUEDON

Né en mai 1975, ce qui, pour lui, est déjà très (trop) loin.

Après une formation E.E.A (électronique), Laurent, vouant une grande passion au développement Internet, a rejoint en 1999 une SSII spécialisée dans le développement d’applications et de sites Internet. Laurent est développeur PHP depuis PHP 2, ses premiers pas ayant été effectués sur l’ex-hébergeur AlternB. Développeur indépendant depuis septembre 2002, il est chargé d’enseignement à la faculté de Rennes.

Il pratique (plutôt mal) la guitare, fait du roller et se fait de petits trous dans la peau avec des piques en métal (il appelle ça le piercing). Mais, surtout, il ne se sépare jamais de son Psion qui lui permet de développer pendant ses déplacements.

Préface

22

(23)

Pierre-Emmanuel Muller

Journaliste spécialisé dans l’internet et les nouvelles technologies, il a un intérêt marqué pour tout ce qui touche à la protection de la vie privée ainsi qu’aux logiciels libres. Il a participé à diverses traductions d’applications libres. Il est l’auteur ou coauteur de plusieurs ouvrages de vulgarisation informatique (Sécurisez votre PC,Montez votre serveur de A à Z,Utiliser les logiciels libres, etc.).

(24)
(25)

Chapitre 1

Introduction

1.1 À quoi sert PHP ? . . . 27

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

1.3 La communauté du libre . . . 35

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

(26)
(27)

1.1. À quoi sert PHP ?

Présentation, rôle et fonctionnement d’un langage de script

Avant de présenter le langage PHP, il est utile de situer brièvement sa place sur l’internet.

Comment, en effet, bien comprendre l’utilité d’un langage de script si la notion de "serveur" est encore floue ?

L’Internet est un réseau de réseaux, constitué d’ordinateurs connectés entre eux. Sa structure est maillée, non pyramidale. Il y a bien des échelons, mais les échelons les plus élevés sont, en fait, assez proches de la base, et sont, surtout, en très grand nombre. Ces échelons sont interchangeables. Quand votre échelon supérieur est absent, en panne, ou disparu, vous pouvez utiliser un autre échelon de même type. En bref, deux machines sont généralement interchangeables.

Il est ainsi très difficile de "diriger" l’Internet. Comme tout bon processus de communication, Internet dispose d’un langage (en fait de plusieurs langages) qui dépend du service que vous désirez utiliser (web, mail, ftp, etc.). Quel que soit le service en question, ce langage est commun à toutes les machines informatiques, et est indifférent aux plateformes. Les données provenant d’Internet sont donc, moyennant parfois quelques retraitements, réutilisables par tout ordinateur. Ainsi, un site web est construit indépendamment de la plateforme sur laquelle il est conçu. Ce sont les logiciels qui s’adaptent aux machines. Il existe un navigateur web (Netscape) pour PC et une autre version pour Mac. Les données qu’ils exploitent, en revanche, sont indépendantes des systèmes d’exploitation (Windows, MacOs, Linux, etc.). Les composantes les plus connues de l’Internet sont le Web (World Wide Web) ou le courrier électronique (e-mail).

Concentrons-nous sur le Web, car c’est de cela qu’il est question avec PHP. Admettons que vous désirez consulter le site web du moteur de recherche Google. Vous donnez l’adresse http://www.google.comà votre navigateur, vous lancez la recherche, et, quelques secondes plus tard, la page d’accueil du site s’affiche sur votre écran. En fait, derrière cette action se cache toute une interaction client-serveur, primordiale à intégrer pour bien saisir le fonctionnement de PHP.

Votre navigateur, le client, interroge un serveur, en lui demandant la page d’accueil d’un site.

Le serveur est une machine qui héberge le site web en question. Cette machine doit être, en principe, connectée en permanence au réseau. Concrètement, ce sont les disques durs de cette machine qui stockent les pages HTML ou PHP qui seront demandées par les internautes. Pour que le serveur soit en mesure de vous répondre, il faut que certains programmes et services soient présents et fonctionnels en son sein. Dans le cas d’un site web, il faut que le serveur dispose d’un serveur web, c’est-à-dire d’un programme permettant l’interprétation et la diffu- sion des pages demandées par les internautes. Votre navigateur demande la page, le serveur web reçoit et comprend votre requête, il recherche la page en question et, si elle est disponible, vous la retourne. En fait, il ne vous retourne que le code source de la page, en général du HTML, mais ce peut être une image ou une animation. La mise en forme, la construction et l’affichage de la page incombent à votre navigateur.

PHP est un langage de script HTML, c’est-à-dire qu’il fonctionne en relation avec le langage HTML (HyperText Markup Language). Il fonctionne du côté du serveur, et non pas du côté du client, et permet de générer des pages web "à la volée". Concrètement, un script PHP est intégré au code source d’une page HTML. Lorsque la page est appelée, le script PHP est interprété, et le tout est livré au serveur web qui, au final, répond au navigateur de l’internaute. Le surfeur obtient une page HTML tout ce qu’il y a de plus classique, à la différence que cette page

1.Introduction

(28)

n’existait pas en tant que telle sur le serveur web. On dit alors que la page a été créée "à la volée", ou dynamiquement.

Plus concrètement, prenons une page HTML toute simple dont voici le code source :

<html>

<head>

<title>Je teste le langage PHP</title>

</head>

<body>

</body>

</html>

Voici un script PHP sans prétention :

<?php

echo ("PHP est un palindrome.");

?>

Pour intégrer ce script à la page HTML, il suffit, ici, d’insérer le code entre les balises<body>

et</body>de la page. Ce qui nous donne alors ceci :

<html>

<head>

<title>Je teste le langage PHP</title>

</head>

<body>

<?php

echo "PHP est un palindrome.";

?>

</body>

</html>

C’est aussi simple que ça. Comme vous pouvez le constater, le script PHP est encadré par une balise de début et une de fin (à savoir<?phpet?>). Ce sont des informations qui, à la lecture de la page, indiquent au serveur qu’il doit interpréter ces informations comme de PHP, et non plus comme du HTML.

Un script est défini comme suit par le jargon Linux France : "Une suite d’instructions simples, peu structurées, permettant d’automatiser certaines tâches [...]". Dit ainsi, c’est assez cinglant.

En clair, un script PHP vous permet non seulement de générer du texte ou du code HTML, mais également d’envoyer un courriel, d’accéder à une base de données, de lancer un programme sur le serveur, etc. Il est donc ainsi possible de compter le nombre de visiteurs sur votre page, de gérer un livre d’or ou bien même de réaliser des applications web à part entière, comme des gestionnaires de contenus (PHPNuke, DaCode, SPIP, etc.) ou des outils de travail collaboratifs (PHPGroupware, par exemple).

En fait, PHP possède les mêmes fonctionnalités que les autres langages de script. Son gros atout réside dans son fonctionnement résolument tourné vers le Web. En natif, ce sont plus de vingt bases de données qui sont supportées par PHP, sans que l’utilisateur ait à faire quoi que ce soit. Tous les grands protocoles de l’internet fonctionnent, eux aussi, sans autre forme de procès avec PHP : SMTP, POP3, IMAP, FTP, SNMP, etc.

Chapitre 1 Introduction

28

1.Introduction

(29)

1.2. Les version 1 à 5 de PHP

Rasmus Lerdorf

Chaque grand projet libre a un père ou un leader charismatique. PHP ne déroge pas à la règle.

Qui plus est, l’histoire de PHP facilite les choses, ses premiers pas étant tout ce qu’il y a de plus simple à narrer. Les premières esquisses de PHP sont le fait d’un seul homme : Rasmus Lerdorf. Sur son site personnel, Rasmus Lerdorf reste assez discret. Les rares éléments que l’on peut glaner sur son parcours personnel se limitent à des expériences professionnelles ou à quelques hauts faits de programmation. On en apprend même plus en suivant l’histoire de PHP, intimement liée à celle de son créateur, tout au moins dans les premières années. Rasmus Lerdorf est né en 1969 sur l’île de Greenland. On comprend que le petit Rasmus ait préféré l’informatique à l’agriculture, tant l’île de Greenland est peu clémente : les terres arables, les forêts et les pâturages permanents représentent à peine 1 % de la superficie totale de l’île. L’île de Greenland est tout de même d’une superficie trois fois supérieure à celle du Texas (2 170 000 km_) pour une population inférieure à celle de l’île de Guernesey qui ne fait que 78 km_(56 300 personnes).

Rasmus Lerdorf ne se définit pas comme un programmeur, même si le fait qu’il soit capable de faire fonctionner PHP sur son magnétoscope conduit le spectateur à penser le contraire. Il n’a pas de diplôme d’informaticien, mais une formation d’ingénieur. Il a travaillé pour des sociétés comme Bell, IBM ou Linux Care. Selon une étude menée à grands coups de scripts Perl par Per Abrahamsen, Rasmus Lerdorf est l’un des Danois les plus célèbres. Il arrive même, dans le classement, avant le penseur Soren Kierkegaard.

Signalons enfin que Rasmus Lerdorf, en bon développeur du logiciel libre, n’est pas dénué de sens de l’humour. Le petit dernier des Lerdorf a pour nom Carl Alexander Lerdorf. Sur le site de la famille Lerdorf, son nom se lit : Carl AlexandeR Lerdorf… Récursif, quand tu nous tiens !

Quelques sites (en anglais)

Site officiel de la famille Lerdorf (avec les photos du petit Carl Alexander Lerdorf) : http://www.lerdorf.com

Les Danois célèbres :

http://www.dina.kvl.dk/~abraham/fame/fame.html Figure 1.1:

Rasmus Lerdorf

1.Introduction

(30)

Naissance et évolution de PHP

Naissance et première version

La première version de PHP n’en était pas une. Ce ne furent que quelques outils développés par Rasmus Lerdorf pour les besoins de son site personnel. Dans le courant de l’année 1993, M. Lerdorf avait commencé à développer des scripts en langage C et en Perl. À partir de là a pu être constituée, en septembre 1993, une première librairie. Lassé de devoir réécrire encore et toujours les mêmes portions de code, M. Lerdorf eut l’idée de séparer sa logique de programmation de celle du HTML, afin de pouvoir réutiliser plus facilement certaines portions de code.

Pour qu’une première version de PHP comme langage de script voie le jour, il ne manquait plus à la librairie qu’un interpréteur capable d’analyser le code HTML, pour y repérer des balises particulières et appeler les fonctions qui y sont liées. Cela fut fait en novembre 1993, date à laquelle M. Lerdorf situe la naissance de la toute première version de PHP. La première mouture du langage n’avait donc pas de très grandes ambitions. PHP se limite alors à un interpréteur qui analyse une page HTML, en ressort des balises (inspirées du SGML), et appelle les fonctions correspondantes à ces balises. Tout cela dans quel but ? Afin de compter et d’enregistrer le nombre de visiteurs consultant un curriculum vitae sur son site personnel.

Rasmus Lerdorf résume ses motivations à une lassitude face à Perl, jugé comme étant trop lent et doté d’un analyseur trop restrictif.

Cette première version n’eut qu’un succès très limité, et pour cause… elle ne fut jamais publiée.

Il faut attendre février 1994 pour qu’une première version de PHP soit enfin diffusée.

Interviews de Rasmus Lerdorf

Interview de Rasmus Lerdorf dans le Journal du Net :

http://developpeur.journaldunet.com/itws/it_phpnexen_rasdorf.shtml Interview de Rasmus Lerdorf pour O’Reilly (en anglais) : http://web.oreilly.com/news/lerdorf_0200.html

PHP 2 et l’ouverture sur le monde

La première utilisation plus large de PHP remonte au site http://www.io.org. Rasmus Lerdorf réutilisa son langage de script pour installer divers petits outils en ligne (un compteur de visiteurs, l’affichage de la dernière personne connectée, etc.). Alors, le succès de PHP fut immédiat. D’autres utilisateurs du site voulurent utiliser PHP, et les scripts poussèrent dans le HTML comme les champignons dans un sous-bois humide. Étant donné que l’interpréteur évoqué plus haut était lui-même un CGI, les administrateurs du site repérèrent rapidement le changement. PHP se révélait fort gourmand en ressources. Pour remédier à cela et éviter une mort certaine du langage, Rasmus Lerdorf se pencha alors sur le serveur web pour y inclure PHP comme module interne plutôt que de le conserver en module externe (CGI), beaucoup plus lourd. Le serveur utilisé était HTTPD NCSA, de l’Université de l’Illinois. Une fois PHP ajouté au serveur, M. Lerdorf convainquit tout de même les administrateurs de passer sous Apache, serveur web beaucoup plus souple à utiliser et à programmer.

Chapitre 1 Introduction

30

1.Introduction

(31)

C’est à cette époque que M. Lerdorf obtint un emploi à l’université de Toronto. Sa mission était de mettre en place un système de connexion à l’Internet géré depuis une interface web. Le tout faisait intervenir une base de données des étudiants, des serveurs, des terminaux Cisco ainsi que quelques autres composants. En recherchant un outil utilisable dans la mise en place de cette architecture, Rasmus Lerdorf se rendit compte qu’il n’y avait rien qui lui plaisait réellement. Il décida donc de réécrire l’interpréteur de PHP et ses outils connexes, pour les rendre plus facilement multi-usages et généralistes. PHP devait être capable de dialoguer avec des bases de données ou d’autres sources extérieures (comme, par exemple, des formulaires HTML).

Ce sera à nouveau, pour Rasmus Lerdorf, l’occasion d’utiliser PHP et de le faire progresser.

Anciennement Personal Home Page, PHP s’appelle alors PHP/FI (PHP/Form Interpreter, interpréteur de formulaires), du fait des nouveaux outils ajoutés par M. Lerdorf pour interfacer PHP avec des bases de données. La syntaxe de PHP/FI reste simple, encore un peu incohérente et assez proche du Perl.

PHP/FI connaît alors un très large succès. De nombreux développeurs utilisent PHP, et non pas seulement pour interroger des bases de données. PHP/FI sert déjà à créer des pages web au contenu dynamique, ce qui sera l’une des applications les plus populaires du langage par la suite. Il présente déjà certaines des principales fonctionnalités de PHP.

En 1997, ce sont déjà plus de 50 000 sites qui utilisent PHP.

PHP 3

Publiée en juin 1998, après neuf mois de tests, la troisième version du désormais officiellement nommé PHP (PHP : Hypertext Preprocessor, le premier P faisant référence à PHP lui-même.

Récursif quand tu nous tiens...) fait un grand bond en avant. La sortie de cette nouvelle version correspond également à une solide refonte du moteur de PHP. Deux développeurs, Zeev Suraski et Andi Gutmans jugeaient que PHP/FI n’était pas assez performant pour leurs applications de commerce en ligne, et décidèrent donc de le réécrire. PHP 3 fut annoncé comme le successeur officiel de PHP/FI.

L’une des principales nouveautés de PHP 3 – principale en tout cas au regard de son développement – fut une API (Application Programming Interface, interface de programmation d’application) qui permit à de nombreux développeurs de participer au développement du langage. De plus, PHP supportait désormais la syntaxe objet, sa syntaxe propre devenant, elle, plus cohérente et solide.

La version finale de PHP 3 fonctionnait sur de nombreuses plateformes, avec de nombreux serveurs web et bases de données. Les protocoles SNMP ou IMAP étaient alors supportés moyennant une compilation appropriée. PHP pouvait être utilisé en mode CGI avec la plupart des serveurs HTTP, ou bien être chargé en module, comme par exemple avec Apache.

De nombreuses fonctionnalités avaient été ajoutées à PHP 3, mais, en plus, cette sortie coïncidait avec l’attente de nombreux nouveaux webmestres qui avaient besoin d’un outil simple pour ajouter une touche de dynamisme à leurs sites web. La fin des années 1990 fut, en effet, une période faste pour le Web, porté dans sa croissance par l’arrivée de l’Internet dans le grand public. PHP permettait alors de mettre en place très facilement une solution de commerce en ligne, des albums photo, des systèmes de gestion de contenus, etc. Sa facilité d’accès et d’usage, ainsi qu’une gamme d’outils résolument tournés vers le Web, faisaient de ce langage la solution idéale pour de nombreux webmestres.

À la fin de l’année 1998, plus d’un million de serveurs web devaient utiliser PHP 3. Le langage de script avait conquis plusieurs dizaines de milliers d’utilisateurs.

1.Introduction

(32)

PHP 4

Fidèle à la toute jeune tradition, PHP 4 allait une nouvelle fois entraîner une réécriture complète de son moteur. Dès l’hiver 1998, Andi Gutmans et Zeev Suraski se penchèrent sur le moteur interne du langage pour le reprendre de fond en comble. Leur objectif était de rendre PHP encore plus performant (ce que l’on comprend aisément), et de rendre le code encore plus modulaire. Il fallait également permettre au PHP d’être plus à l’aise avec des applications complexes. PHP 3 posait problème face à ces applications complexes. Sa syntaxe permettait leur exécution, mais le moteur du langage n’avait pas été conçu pour les faire fonctionner efficacement. L’écriture d’un nouveau moteur semblait alors nécessaire pour permettre au PHP de passer à une nouvelle étape de sa croissance.

Ce nouveau moteur devait porter le nom de ses deux créateurs : le Zend Engine, combinaison de ZEev et ANDi. Une première version de PHP doté de ce nouveau moteur sortit dans le courant de l’année 1999. La publication officielle de la version finale fut annoncée en mai 2000, six ans après le premier PHP. PHP 4 assurait une compatibilité ascendante par rapport à PHP 3, et la migration de PHP 3 à PHP 4 fut encore plus souple que celle de la version 2 à la version 3.

Outre un cœur neuf, PHP disposait d’une pléthore de nouveaux membres. Dans sa quatrième version, PHP supporte quasiment tous les serveurs web du marché, les bases de données les plus répandues, plusieurs nouvelles structures de langage ou encore la bufferisation de sortie.

On compte également des améliorations en matière de sécurité. L’architecture de PHP 4 est encore plus ouverte et évolutive que celle de PHP 3. On remarque notamment la création d’une interface ISAPI (Internet Server Application Programming Interface, outil de spécification des DLL pouvant être utilisé par les serveurs web de Microsoft). PHP 4 permet également d’instancier et de manipuler des classes Java comme si elles étaient de simples classes PHP.

PHP peut aussi exécuter des servlets. Autre amélioration majeure de PHP 4 : l’introduction des sessions en mode natif. L’impossibilité pour PHP 3 de gérer les sessions constituait une grosse lacune pour un langage tout entier tourné vers le Web. Cette faiblesse ne jouait pas en faveur de PHP, tout particulièrement face à l’ASP qui, lui, savait déjà gérer les sessions. La lacune de PHP 3 pouvait certes être comblée via des solutions comme PHPLib, mais l’inclusion en mode natif dans PHP 4 réglait définitivement la question. PHP 4 marque également l’entrée du langage dans le monde des sociétés commerciales. Les deux pères fondateurs de PHP 3, Zeev Suraski et Andi Gutmans, créèrent la société Zend pour distribuer et vendre des produits gravitant autour de PHP. Si le Zend Engine reste libre, bien que sous une licence assez critiquée jusque dans sa seconde version, certains produits commercialisés par Zend sont des logiciels propriétaires. Signe évident d’une maturité du langage, PHP devient alors le support d’un commerce tourné vers les grands comptes de l’Internet. Belle évolution pour ce qui n’était, au départ, qu’une petite collection de scripts Perl destinés à compter des visiteurs...

La communauté PHP ne compte plus seulement des développeurs ou des webmestres.

Désormais, de nombreux internautes participent à la documentation de PHP, à sa traduction ou à son annotation. En France, par exemple, la société Nexen héberge la documentation officielle de PHP en français, dont elle a produit une version annotée. Le projet Pear regroupe, lui aussi, de nombreux participants, qui ne sont pas directement impliqués dans le développement de PHP.

On compte aujourd’hui plusieurs millions de sites web qui utilisent PHP. En se basant sur ce comptage des noms de domaines, on peut dire que cela représente 20 % de l’Internet. Les développeurs, eux, sont des centaines de milliers à l’utiliser. Le site Security Space tient à jour une liste des modules Apache les plus utilisés. En juin 1998, PHP était présent sur 8 % des sites audités par Security Space. En mars 2002, presque 45 % des sites audités avaient installé le Chapitre 1 Introduction

32

1.Introduction

(33)

module PHP pour Apache. Perl, lui, était, à la même date, présent sur 20 % de ces sites (rappelons que Perl date de 1987 et PHP de 1994).

PHP 5

La tant attendue version 5 de PHP est sortie le 13 juillet 2004. Elle apporte de très nombreuses nouveautés tout en conservant une large compatibilité avec PHP4. Si la grande nouveauté de la version 5 reste le nouveau modèle orienté objet, les développeurs de PHP n’ont pas oublié l’héritage des 4 précédentes versions qui ont permis à de très nombreux développeurs de faire leurs premiers pas dans le monde du script pour le web. La plupart des scripts écrits pour PHP4 devraient fonctionner sans modifications avec PHP5. Il existe toutefois quelques différences dont la liste est disponible sur le site officiel du projet PHP.

Incompatibilités entre PHP4 et PHP5

Même si vos scripts écrits pour PHP4 ont de très larges chances d’être compatibles avec PHP5, certaines incompatibilités ou modifications sont connues et listées. Le site officiel PHP en dénombre une dizaine. Vous les trouverez à cette adresse : http://www.php.net/manual/fr/migration5.incompatible.php

L’évolution de PHP

PHP, et avec lui toute la communauté de développeurs, doit faire face à des questions inédites.

Sa taille provoque des soucis d’échelle, déjà rencontrés par d’autres projets (comme Linux, par exemple). Jusqu’à présent, les réponses apportées par la communauté aux problèmes apparus furent satisfaisantes, tout au moins assurèrent-elles sa survie et sa croissance, sans nuire à la qualité du langage. On peut citer, à titre d’exemple, la mise en place d’une équipe d’assurance qualité durant l’été 2000 pour faire face aux nombreuses critiques suscitées par la piètre qualité des premières versions de PHP 3. Le langage avait, en effet, été testé sur trop peu de plates-formes différentes. Désormais, une équipe complète de développeurs a pour objectif principal de chasser le bug au sein du projet PHP.

Figure 1.2: Le nombre de sites utilisant PHP croît de jour en jour

1.Introduction

(34)

Alors que PHP est un langage de script né du Web pour le Web, l’on voit même naître des projets impliquant PHP, qui n’ont plus rien à voir avec les objectifs premiers du langage.

PHPGtk est ainsi une solution permettant de développer des applications en PHP à partir d’une interface graphique côté client.

De même, l’entrée en jeu de sociétés commerciales a amené des questionnements soulevés par des acteurs du monde du libre, comme la FSF (cf. problème de la licence du moteur Zend).

Encore une fois, la communauté PHP a su faire preuve de beaucoup de pragmatisme dans ses réponses. Résultat des pressions de la FSF, Zend a changé la licence de son moteur. PHP 4 reste, pour sa part, sous une licence Apache, jugée plus souple pour les développeurs. Et, quand on demande aux développeurs de PHP comment ils prennent les critiques que l’on peut leur adresser parce que PHP 4 n’est pas GPL, ils vous répondent “avec des frites”.

Si Rasmus Lerdorf a pu être, à un moment, une figure de proue de PHP, et qu’il reste aujourd’hui encore son représentant le plus médiatique, on peut tout de même remarquer que la communauté PHP ne bénéficie pas d’une structure centralisatrice qui ferait l’interface entre le langage et les entreprises ou les institutions. Le logiciel libre a l’Open Source Initiative ou la FSF, un projet comme Kde dispose de toute une infrastructure qui assure sa promotion ou sa représentation, Linux a Linus Torvalds. Vu de l’extérieur, le monde de PHP paraît encore flou.

PHP

La société Zend, éditrice du Zend Engine (en anglais) : http://www.zend.com

La société Nexen : http://www.nexen.net

Nombre de sites utilisant PHP (en anglais) : http://www.php.net/usage.php

Modules Apache les plus utilisés (en anglais) :

http://www.securityspace.com/s_survey/data/man.200203/apachemods.html Des projets attachés au PHP :

http://php3.de/manual/fr/html/history.php.related.html Interview du créateur de PHPGtk (en anglais) : http://beta.usephp.net/article.php3?id_article=3p

La création de la communauté

Si PHP a pu croître et prospérer jusqu’à devenir l’un des langages de script les plus utilisés, c’est en grande partie grâce à une communauté de développeurs qui, dès la version 3, fut la cheville ouvrière de ses améliorations. PHP/FI, seconde version du langage, reste l’œuvre d’un seul homme, Rasmus Lerdorf, père de PHP. À partir de la version 3, Rasmus Lerdorf n’est plus seul à la tête de PHP. Zeev Suraski et Andi Gutmans prirent en main, par deux fois, la refonte complète du moteur de PHP. Cette ouverture de PHP est due à une interface API mise en place très tôt, mais, surtout, à la volonté de son créateur de partager son travail avec d’autres développeurs. Rasmus Lerdorf le dit lui-même : il a toujours appris en regardant le code d’autres programmeurs. Ne pas faire profiter, en retour, la communauté de son travail ne lui a même pas traversé l’esprit.

Chapitre 1 Introduction

34

1.Introduction

(35)

Comment cette communauté est-elle née ? Dans une interview, Rasmus Lerdorf situe sa date de naissance au jour où, alors employé par l’université de Toronto, il avait mis en ligne son code source à disposition sur une page web. Cela dans l’optique évidente que d’autres puissent en profiter. Il n’avait alors aucune idée de qui utilisait PHP de par le monde, ni pour quelles applications. Un beau jour, il reçut un courriel d’un utilisateur japonais, qui lui faisait parvenir un patch. Le patch était tout à fait fonctionnel et pertinent. Il résolvait un problème auquel Rasmus Lerdorf n’avait pas encore eu affaire, mais qui allait se poser inéluctablement. PHP bénéficiait d’une aide extérieure, la communauté était née ; elle compte aujourd’hui plus de 300 développeurs.

La communauté PHP

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

1.3. La communauté du libre

Pourquoi présenter le monde du logiciel libre dans un livre traitant de PHP ? Simplement parce que, sans cette communauté, PHP ne serait pas ce qu’il est aujourd’hui. Si la marque du monde du libre n’est pas particulièrement visible sur le langage lui-même, sa philosophie et son mode de développement ont eu, et ont toujours, une influence notable sur le langage PHP et sa croissance. Il suffit de voir le rôle prépondérant que joue le triptyque Apache-MySQL-PHP dans le monde du Web face à des solutions comme IIS-ASP-Access. PHP est indissociable du monde du libre. Cette partie n’a pas pour objectif de faire l’apologie du logiciel libre, ni même de faire un comparatif entre code source ouvert ou code source fermé ; tout comme le souligne Linus Torvalds lui-même, les deux existent et c’est tant mieux. Il nous a pourtant semblé utile de présenter le monde du libre, pour permettre à celui qui découvre PHP, d’une part de comprendre le contexte de sa croissance et de son évolution, et d’autre part de savoir vivre dans le monde de PHP. Celui qui ne sait pas que les développeurs qui travaillent avec PHP distribuent largement leurs sources et discutent massivement en ligne de l’évolution du langage et des questions techniques qui s’y rattachent sera vite perdu et passera à côté de l’un des principaux atouts de PHP : sa communauté.

Historique

Le monde du logiciel libre plonge ses racines dans l’histoire des hackers (au sens premier du terme). Toute la culture du logiciel libre et son folklore doivent beaucoup aux pionniers de l’informatique, ces "vrais programmeurs" : les hackers (selon la définition d’Eric S. Raymond).

Pour une histoire complète et documentée de cette culture, on se reportera àUne brève histoire des hackers, par M. Eric S. Raymond. Disons simplement que les logiciels libres ne sont pas nés avec Linux. Leur histoire est bien plus riche et complexe.

C’est dans l’un des plus prestigieux laboratoires d’informatique du monde, celui d’intelligence artificielle du MIT (Institut de technologie du Massachusetts) que s’est cristallisée l’opposition entre logiciels libres et logiciels propriétaires. Chef de file du laboratoire, et féroce opposant à la commercialisation des techniques mises au point dans ce laboratoire, Richard M. Stallman créa, en 1984, la Fondation du logiciel libre (Free Software Foundation, FSF). Hacker au sens

1.Introduction

(36)

propre du terme, il développa alors des logiciels libres, dont le célèbre éditeur Emacs. M.

Stallman entrepris alors de recréer un clone complet libre du système d’exploitation propriétaire UNIX. C’est ainsi que naquit le projet GNU (GNU is not UNIX. Décidément, acronyme récursif quand tu nous tiens…). La FSF avait pour objectif de soutenir et d’accompagner des projets libres. Sa création formalisait les thèses et idées des défenseurs du logiciel libre. Fortement imprégnée de la culture de l’échange et de la transmission libre des savoirs des milieux universitaire et scientifique, la FSF estime que "tout comme les idées, les logiciels ne sont pas tangibles et peuvent être copiés sans perte. Les transmettre est la base d’un processus d’évolution qui alimente le développement des réflexions." (site de la FSF Europe, Qu’est-ce qu’un logiciel libre ?). Pour être qualifié de libre, un logiciel doit, selon la FSF, répondre à quatre critères de liberté. Tout d’abord, un programme doit pouvoir être exécuté pour n’importe quel usage. Ensuite, un utilisateur doit pouvoir étudier le fonctionnement du programme et l’adapter à ses besoins. Il doit également être possible de redistribuer des copies et, enfin, d’améliorer le programme en rendant publiques les modifications pour que l’ensemble de la communauté en bénéficie.

Pour assurer ces libertés aux logiciels libres, M. Stallman établit la GPL : GNU General Public License.

La machine en marche

Les logiciels de la FSF ne sont pas les seuls produits libres. De très nombreux logiciels libres sont en rapport avec l’internet. S’ils n’y sont pas directement liés, c’est leur développement qui en a profité.

On peut citer Sendmail, développé en 1981 par Eric Allman. Aujourd’hui encore distribué gratuitement par la société Sendmail Inc., Sendmail est l’agent de transport de mails le plus utilisé sur Internet. Il détient plus de 75 % des parts de marché.

Autre figure historique et emblématique du monde du libre : Perl. Perl signifie Pratical Extraction and Report Language (langage pratique d’extraction et de rapport). C’est un langage de programmation très largement utilisé sur l’Internet. Il sert principalement aux administrateurs de systèmes et de réseaux. Il sert également dans le développement de CGI.

On estime qu’une centaine de programmeurs participe au développement de Perl. Les programmeurs utilisant Perl seraient 500 000 et les utilisateurs, eux, plusieurs millions. En se basant sur les ventes d’ouvrages dédiés à chaque langage, les éditions O’Reilly estiment que Perl est aussi souvent utilisé que Java.

Apache est un projet libre d’envergure ; peut-être celui qui a démontré le premier qu’un logiciel libre pouvait faire jeu égal avec les grandes entreprises de développement de logiciels.

Il détient aujourd’hui la plus importante part de marché pour les serveurs web (source Netcraft), et cela face à des acteurs aussi puissants que Microsoft ou Netscape. En juin 1998, le géant de l’informatique IBM annonçait soutenir officiellement le groupe Apache. Ce choix d’Apache par IBM fut une étape importante dans l’histoire des logiciels libres. Les impératifs commerciaux et économiques qui président aux décisions d’IBM donnaient à ce soutien à Apache une valeur toute particulière. Un logiciel libre pouvait servir les intérêts du monde commercial sans se galvauder ni perdre ses ambitions.

L’histoire de la FSF n’est pas jonchée seulement de réussites. L’un des principaux échecs de la FSF fut de mettre beaucoup trop de temps pour fournir un noyau à son système d’exploitation (GNU). Cependant, l’une de ses principales réussites fut de fournir une trousse à outils à celui qui allait développer le noyau libre le plus connu : Linus Torvalds. C’est en effet grâce aux Chapitre 1 Introduction

36

1.Introduction

Références

Outline

Documents relatifs

Quel est le coefficient de proportionnalité qui exprime la remise en fonction du montant des achats?. (Montant des achats) ×

En déduire les variations de la

• Pour passer en revue tous les éléments du tableau, quel que soit leur numéro dans le tableau, on utilise le foreach.. • La boucle foreach gère automatiquement le fait

– Mettez le code JavaScript dans une fonction que vous placez dans le Head.

Cela a vous a peut être parut un peu lourd, mais si vous n'avez fait que survolez cette partie, vous verrez que vous y reviendrais car c'est vraiment des bases très importants à

2016 – L’engagement dans le réseau DEPHY FERME a été bénéfique à l’exploitation : ça nous a permis de travailler en groupe, d’échanger avec les autres agriculteurs et

Sur la ferme, le désherbage mécanique a été renforcé avec le passage de herse étrille sur blé et de bineuse sur les cultures de printemps, avec utilisation de doigts Kress..

On cherche 0 sur la 1 re ligne du tableau et on lit son image sur la 2 de ligne.. Donne un encadrement de l’antécédent