V. PHPÂ : Dynamisme du contenu▲
V-A. Introduction▲
Les trois notions fondamentales :
- le fichier est au format PHPÂ ;
- le document est habituellement au format HTML et à destination du navigateur Web (qui se chargera de le transmettre à l'internaute) ;
- l'outil est le serveur Web avec l'exécutable PHP.
Vous est-il déjà arrivé de créer toute une suite de documents HTML pour faire une galerie de photos ou un catalogue de produits ? Vous en conviendrez, c'est fastidieux…
Eh bien, la solution existe : un langage de script tel que PHP !
À l'origine, PHP fut créé par Rasmus Lerdorf pour ses besoins personnels : Personal Home Page (version 1). Depuis, le nom fut changé à Hypertext Preprocessor (ce qui présage de son utilité principale : créer dynamiquement des documents HTML). Depuis le 2 novembre 2006, PHP est en version 5.2 ; la branche 5.3 est disponible depuis le 30 juin 2009 ; la version 6 est reportée à une date encore inconnue.
V-B. Analogie▲
Lorsque vous êtes dans un bar parisien, vous commandez votre boisson au serveur qui s'occupe d'aller la chercher au comptoir et de vous l'apporter. Vous pouvez alors consommer votre boisson.
Sur Internet, il se passe quelque chose de similaire : lorsque vous êtes dans un site Web, vous cliquez sur des liens pour consulter des documents. Le serveur Web reçoit vos demandes, s'occupe de rechercher le document voulu et vous l'envoie afin que vous puissiez le lire (c'est la consommation).
Dans le cas de scripts PHP, la « recherche » du document s'accompagne de ce que l'on appelle son « interprétation ». Dans l'exemple du bar parisien, vous ne demandez pas systématiquement un « jus d'ananas » que le serveur se contente d'ouvrir devant vous : parfois, vous demandez un « café au lait » qui lui demande un peu de préparation. En fait, dans ce cas, ce n'est pas le serveur qui prépare la boisson : il sous-traite votre demande à un collègue, car cela lui prendrait trop de temps de le faire lui-même, or il a d'autres clients à servir.
Là encore, il se passe la même chose dans l'environnement Web. Lorsque le serveur Web reçoit une demande de document, il sous-traite la tâche à PHP afin de pouvoir retourner à ses affaires : c'est PHP (et non le serveur Web) qui s'occupe de construire le document. Une fois qu'il est prêt, le document est envoyé de PHP au serveur Web, puis du serveur Web au navigateur Internet (c'est-à -dire à vous, l'internaute).
V-C. Outils nécessaires▲
Afin de programmer en PHP, il est fondamental d'utiliser un véritable EDI tel que PHPEditTest d'EDI pour PHP : PHPEdit ou PHPEclipse. Ces outils vous permettront d'être efficace. Toutefois, de nombreux développeurs continuent à utiliser des éditeurs simples comme Notepad++.
Avec l'expérience, vous verrez ce qui vous convient le mieux…
À part d'un logiciel d'édition de code et de votre navigateur Internet, vous aurez besoin d'un serveur Web. Apache est le plus connu d'entre eux, mais il n'est pas toujours facile à installer, c'est pourquoi dans un premier temps je vous recommande WAMP Server, XAMPP (ce dernier ayant le mérite de très bien s'intégrer dans PHPEclipse) ou encore Zend Core (validé/supporté par Zend).
V-D. Vos premiers scripts PHP▲
V-D-1. Introduction▲
Les scripts PHP s'intègrent dans la page Web. Lorsque le document est demandé par le navigateur Web, le serveur Web (qui est à l'écoute) entend la demande et fait interpréter le script par PHP, puis il renvoie le résultat au navigateur.
Un script PHP est identifié par une balise particulière : <?php ouvre le script et ?> le referme. Tout ce qui se trouve à l'intérieur de cette balise est du PHP.
Vous devez enregistrer tous vos scripts à l'intérieur de la racine du serveur Web dans votre système de fichiers.
Le chemin par défaut dépend de votre serveur Web :
- Zend Core 2Â : C:\Program Files\Zend\Apache2\htdocs\Â ;
- XAMPPÂ : C:\Program Files\Xampp\htdocs\Â ;
- WAMP Server : C:\wamp\www\ ;
- EasyPHP 1-8Â : C:\Program Files\EasyPHP1-8\www\Â ;
- Apache 2.2Â : C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\Â ;
- Apache 2.0Â : C:\Program Files\Apache Group\Apache2\htdocs\Â ;
- Apache 1.3Â : C:\Program Files\Apache Group\Apache\htdocs\Â ;
- etc.
V-D-2. Découvrir les variables▲
<
html>
<
head>
<
title>
<?php
echo "Hello World!"
;
?>
<
/title
>
<
/head
>
<
body><h1>
<?php
echo "Hello World!"
;
?>
<
/h1
><p>
<?php
echo "Un bonjour de Yogui."
;
?>
<
/p
></body
>
<
/html
>
Pour visualiser le résultat, il n'est pas suffisant de double cliquer sur le fichier… Il vous faut passer par le serveur Web. Ainsi, ouvrez votre navigateur Internet et chargez la page :
http://localhost/test.php
Le résultat de ce script ne manquera pas de vous rappeler l'exemple de document HTML vu auparavant…
De la même manière qu'en HTML, les espaces et sauts de ligne ont peu d'importance en PHP. Le script suivant est équivalent au précédent :
<
html>
<
head>
<
title>
<?php
echo "Hello World!"
;
?>
<
/title
>
<
/head
>
<
body>
<
h1>
<?php
echo "Hello World!"
;
?>
<
/h1
>
<
p>
<?php
echo "Un bonjour de Yogui."
;
?>
<
/p
>
<
/body
>
<
/html
>
Évidemment, l'intérêt de PHP est très limité dans ces exemples… Allons-y pas à pas, ceci étant une introduction.
Voyons maintenant avec une variable (une variable est un mot commençant par le signe « dollar » $) :
<
html>
<
head>
<
title>
<?php
$title
=
"Hello World!"
;
echo $title
;
?>
<
/title
>
<
/head
>
<
body>
<
h1>
<?php
$title
=
"Hello World!"
;
echo $title
;
?>
<
/h1
>
<
p>
<?php
$text
=
"Un bonjour de Yogui."
;
echo $text
;
?>
<
/p
>
<
/body
>
<
/html
>
Voici un code équivalent, mais à la construction plus flexible :
<?php
$title
=
"Hello World!"
;
$text
=
"Un bonjour de Yogui."
;
?>
<
html>
<
head>
<
title>
<?php
echo $title
;
?>
<
/title
>
<
/head
>
<
body>
<
h1>
<?php
echo $title
;
?>
<
/h1
>
<
p>
<?php
echo $text
;
?>
<
/p
>
<
/body
>
<
/html
>
Ici, j'utilise les variables $title et $text. Cela me permet de ne pas répéter « Hello World ». Le gain est ici minime, cependant j'imagine que vous commencez à voir l'intérêt des variables : elles permettent de réutiliser du texte à l'infini, sans devoir le réécrire. Par ailleurs, si je souhaite modifier le titre de ma page, je n'ai plus qu'à modifier la variable au début du script pour que toute ma page soit mise à jour d'un seul coup. C'est là tout l'intérêt de PHP, mais il faut aller bien plus loin pour l'exploiter selon tout son potentiel…
Dans les équations mathématiques, une variable est une valeur inconnue ou recherchée. En PHP, c'est une valeur que l'on connaît, mais que l'on peut modifier à volonté. Dans les deux cas, on utilise une équation : « x = 5 » en mathématiques ou bien « $x = 5; » en PHP.
Ci-dessus, les lignes qui se trouvent dans les balises PHP s'appellent des expressions. Elles sont délimitées par des points-virgules. Il faut prendre garde à ne pas oublier ce point-virgule : il est fondamental, car il sépare les expressions. Si on l'oublie, PHP a tendance à crier très fort qu'il y a une « syntax error » et il nous dit vers quelle ligne de notre script cela se produit.
Un peu de vocabulaire : donner une valeur à une variable s'appelle « assigner une valeur à une variable ».
Allons maintenant un tout petit peu plus loin en utilisant ce que l'on appelle une structure de contrôle : la conditionnelle if.
<?php
if
(isset($_GET
[
"title"
]
))
{
$title
=
$_GET
[
"title"
];
}
else
{
$title
=
"Hello World"
;
}
$text
=
"
$title
, I am Yogui!"
;
?>
<
html>
<
head>
<
title>
<?php
echo $title
;
?>
<
/title
>
<
/head
>
<
body>
<
h1>
<?php
echo $title
;
?>
<
/h1
>
<
p>
<?php
echo $text
;
?>
<
/p
>
<
/body
>
<
/html
>
Appelez ce script comme vous en avez maintenant l'habitude : le résultat est le même qu'auparavant. Maintenant, ajoutez ceci à la fin de la barre d'adresse du navigateur :
?
title=
bouh
Cela s'appelle un paramètre GET. Dans notre script, nous utilisons une variable $_GET qui teste la présence d'une variable « title ». Si elle existe dans $_GET, alors on la met dans une variable locale que nous appelons $title, sinon on construit cette variable locale $title avec une valeur par défaut. Lorsque vous validez le chargement de la page, le titre et le contenu de la page ont pris la valeur que vous avez mise dans la barre d'adresse. Vous venez juste d'envoyer avec succès des informations au serveur Web et de faire votre première page réellement dynamique !
Dans ces exemples d'utilisation, nous avons utilisé empty() et isset(). Ces constructions du langage PHP s'apparentent à des fonctions, c'est-à -dire qu'on les utilise avec leur nom (« echo » ou « isset ») et en mettant quelque chose dans des parenthèses. Dans le cas d'echo, les parenthèses sont facultatives.
Notez la syntaxe de la structure if : elle accepte un paramètre entre parenthèses comme le fait une fonction, puis il faut lui donner du code entre accolades. Ce qui est placé dans la branche du if n'est exécuté que si la condition est avérée, sinon seulement la branche du else est exécutée. C'est l'une ou l'autre, jamais les deux à la fois.
Sécurité
Je me dois de vous prévenir que le dernier exemple est vulnérable à ce que l'on appelle la faille XSS. Pour le moment, sachez simplement qu'il faut toujours faire attention aux informations que vous prenez de $_GET, $_POST, $_FILES, $_REQUEST et toutes ces variables remplies de données provenant de l'internaute.
V-D-3. Découvrir les inclusions▲
Un autre avantage majeur des scripts PHP (dits dynamiques) sur les fichiers HTML (dits statiques) est la possibilité d'appeler un script depuis un autre script. Ce sont des inclusions de scripts.
Une application typique de cette fonctionnalité est pour les éléments identiques de page en page sur un site : parties supérieure (header) et inférieure (footer), menu de navigation, espace de publicité, etc. En effet, si vous avez déjà fait un site de plusieurs pages en HTML, vous n'avez pas manqué de constater que la moindre modification dans l'un des espaces communs à toutes les pages vous oblige à modifier de la même manière chacune de ces pages. C'est fastidieux, n'est-ce pas ?
PHP vous permet de découper vos pages en éléments indépendants que vous pouvez inclure les uns dans les autres, ce qui vous permet d'avoir un seul script pour chaque élément reproduisible. Cela simplifie les mises à jour de votre site puisque chaque élément se situe à un seul emplacement.
Voici un site minimaliste de trois pages avec des inclusions :
<?php
$title
=
'Bienvenue'
;
include 'header.php'
;
?>
<
h1>
<?php
echo $title
;
?>
<
/h1
>
<!--
Mettre ici le contenu de la page d'accueil
-->
<?php
include 'footer.php'
;
?>
<?php
$title
=
'Notre catalogue'
;
include 'header.php'
;
?>
<
h1>
<?php
echo $title
;
?>
<
/h1
>
<!--
Mettre ici le contenu de la page catalogue
-->
<?php
include 'footer.php'
;
?>
<?php
$title
=
'Nous contacter'
;
include 'header.php'
;
?>
<
h1>
<?php
echo $title
;
?>
<
/h1
>
<!--
Mettre ici le formulaire de contact
-->
<?php
include 'footer.php'
;
?>
<?php
if
(empty($title
))
{
$title
=
'Nouveau document'
;
}
?>
<
html>
<
head>
<
title>
<?php
echo $title
;
?>
<
/title
>
<
/head
>
<
body>
<
/body
>
<
/html
>
Je n'ai pas mis la balise h1 dans le script header.php ; vous verrez à l'utilisation pourquoi j'ai fait de cette manière.
V-E. Avertissement : ce que PHP n'est pas▲
PHP est avant tout un langage de script. Il permet de développer des applications très performantes et très utiles, mais il ne peut pas tout faire. Il est principalement utilisé pour des applications Web, c'est-à -dire pour exécuter du code sur un serveur Web. Ainsi, il ne faut pas s'étonner si PHP offre très peu de moyens de lire le port série, parallèle ou USB de votre machine, par exemple.
V-F. Formation▲
V-F-1. Organisme officiel▲
PHP est développé et maintenu par le PHP GroupSite officiel de PHP. La documentation du langage y est facilement accessible, elle est traduite en français et il est possible de lire les commentaires des internautes.
V-F-2. Nos ressources habituelles▲
- La FAQ PHP répond à vos questions posées dans nos forums.
- Les sources PHP vous donnent des codes permettant de résoudre des problématiques précises.
- Les tutoriels PHPLes meilleurs cours PHP vous permettront d'apprendre tout ce dont vous avez besoin.
- Les livres PHPLes meilleurs livres PHP critiqués par la Rédaction pour toujours avoir une référence sous le coude.
- Le forum PHP vous permet de poser toutes vos questions qui ne trouvent pas réponse dans nos autres ressources.
V-F-3. Notre sélection de cours▲
Comparatif PHP/JavaScript▲
Si vous n'êtes pas encore sûr de vous, commencez par réviser les différences entre les langages JavaScript et PHP grâce au comparatif de Julp.
Guide de style▲
Adrien Pellegrini n'a bien sûr pas omis PHP dans son guide de style.
Les formulaires et PHP5▲
Mon cours sur les formulaires contient toute une partie sur la récupération des données au moyen de PHP.
Les sessions PHP▲
Les sessions sont un mécanisme fondamental permettant de conserver des informations entre les diverses pages visitées par l'internaute. Par exemple, dans le modèle classique du Web, si l'on veut restreindre l'accès à une portion d'un site, il faut utiliser un formulaire de connexion. Cependant, sans utiliser les sessions, il faut que l'internaute remplisse et soumette ce formulaire à chaque fois qu'il souhaite visualiser une page, puisque le serveur a la mémoire courte… Les sessions permettent au serveur de ne pas la perdre aussi facilement.
Julp s'est associé à Mathieu Lemoine pour vous présenter les sessions PHP sous tous leurs aspects.
V-F-4. Nos tests d'EDI▲
Retrouvez la liste de nos ressources dans la page EDI PHPLes meilleurs outils PHP : Éditeurs, EDI.
PHPEclipse : Programmez librement pour le Web▲
Comme un grand nombre de développeurs ici-bas, il est très probable que dans le futur vous étendiez vos connaissances à d'autres langages que PHP. En ce cas, Eclipse est fait pour vous. Jean-Pierre Grossglauser a testé le plugin PHPEclipseTest logiciel : PHPEclipse.
Il existe d'autres dérivés d'Eclipse pour programmer en PHP. Quelques exemples sont : Eclipse PHP, Eclipse PDT, Zend Studio, etc.
PHPEdit, un IDE complet pour PHP▲
PHPEditTest logiciel : PHPEdit étant mon éditeur favori, j'en ai testé les majeures fonctionnalités pour vous.
Test complet de l'éditeur WebExpert de Visicom▲
BWP-Necromance et Pierre-Baptiste Naigeon ont testé WebExpert 6.5Test logiciel : WebExpert.