Langage PHP
Langage PHP
Langage PHP
Introduction à PHP
PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non
du côté client (un script écrit en Javascript ou une applet Java s'exécute sur votre ordinateur...). La syntaxe du
langage provient de celles du langage C, du Perl et de Java. Ses principaux atouts sont:
La gratuité et la disponibilité du code source (PHP3 est distribué sous licence GNU GPL)
La simplicité d'écriture de scripts
la possibilité d'inclure le script Php au sein d'une page HTML (contrairement aux scripts CGi, pour lesquels il faut
écrire des lignes de code pour afficher chaque ligne en langage HTML)
La simplicité d'interfaçage avec des bases de données (de nombreux SGBD sont supportés, mais le plus utilisé avec
ce langage est MySQL, un SGBD gratuit sur les plateformes Unix et Linux, mais payant sous Windows)).
L'intégration au sein de nombreux serveurs web (Apache, Microsoft IIS, ...)
Origines de PHP
Le langage PHP a été mis au point au début d'automne 1994 par Rasmus Lerdorf. Ce langage de script lui permettait
de conserver la trace des utilisateurs venant consulter son CV sur son site, grâce à l'accès à une base de données par
l'intermédiaire de requêtes SQL. Ainsi, étant onné que de nombreux internautes lui demandèrent ce programme,
Rasmus Lerdorf mit en ligne en 1995 la première version de ce programme qu'il baptisa Personal Sommaire Page
Tools, puis Personal Home Page v1.0 (traduisez page personnelle version 1.0).
Etant donné le succès de PHP 1.0, Rasmus Lerdorf décida d'améliorer ce langage en y intégrant des structures plus
avancées telles que des boucles, des structures conditionnelles, et y intégra un package permettant d'interpréter les
formulaires qu'il avait développé (FI, Form Interpreter) ainsi que le support de mSQL. C'est de cette façon que la
version 2 du langage, baptisée pour l'occasion PHP/FI version 2, vit le jour durant l'été 1995. Il fut rapidement utilisé
sur de nombreux sites (15000 fin 1996, puis 50000 en milieu d'année 1997).
A partir de 1997, Zeev Suraski et Andi Gurmans rejoignèrent Rasmus pour former une équipe de programmeurs afin
de mettre au point PHP 3 (Stig Bakken, Shane Caraveo et Jim Winstead les rejoignèrent par la suite). C'est ainsi que
la version 3.0 de PHP fut disponible le 6 juin 1998.
A la fin de l'année 1999, une version bêta de PHP, baptisée PHP4 est apparue...
Implantation de PHP
Un script PHP est un simple fichier texte contenant des instructions écrites à l'aide de caractères ASCII 7 bits (des
caractères non accentués) incluses dans un code HTML à l'aide de balises spéciales et stocké sur le serveur. Ce fichier
doit avoir l'extension ".php3" pour pouvoir être interprété par le serveur!
Ainsi, lorsqu'un navigateur (le client) désire accéder à une page dynamique réalisé en php3:
1
Langage PHP
le serveur reconnait qu'il s'agit d'un fichier php3
il lit le fichier php3
Dès que le serveur rencontre une balise indiquant que les lignes suivantes sont du code php3, il "passe" en mode
php3, ce qui signifie qu'il ne lit plus les instructions: il les exécute!
Lorsque le serveur rencontre une instruction, il la transmet à l'interpréteur
L'interpréteur exécute l'instruction puis envoie les sorties éventuelles à l'interpréteur
A la fin du script, le serveur transmet le résultat au client (le navigateur)
Un script PHP est interprété par le serveur, les utilisateurs ne peuvent donc pas voir le source!
Caractéristiques de PHP
L'interprétation du code
Un code PHP (celui compris entre les délimiteurs <?php et ?>) est un ensemble d'instructions se terminant chacune
par un point-virgule (comme en langage C). Lorsque le code est interprété, les espaces, retours chariot et
tabulation ne sont pas pris en compte par le serveur. Il est tout de même conseiller d'en mettre (ce n'est pas
parce qu'ils ne sont pas interprétés que l'on ne peut pas les utiliser) afin de rendre le code plus lisible (pour
vous, puisque les utilisateurs ne peuvent lire le code source: il est interprété).
2
Langage PHP
Les commentaires
Une autre façon de rendre le code plus compréhensible consiste à insérer des commentaires, des lignes qui seront
tout simplement ignorées par le serveur lors de l'interprétation.
Pour ce faire, il est possible, comme en langage C, d'utiliser des balises qui vont permettre de délimiter les
explications afin que l'interpréteur les ignore et passe directement à la suite du fichier.
Ces délimiteurs sont
/* et */
Un commentaire sera donc noté de la façon suivante:
/* Voici un commentaire! */
Il y a toutefois quelques règles à respecter:
Les commentaires peuvent être placés n'importe où à l'intérieur des délimiteurs de script PHP
Les commentaires ne peuvent contenir le délimiteur de fin de commentaire (*/)
Les commentaires ne peuvent être imbriqués
Les commentaires peuvent être écrits sur plusieurs lignes
Typologie
La manière d'écrire les choses en langage PHP a son importance. Le langage PHP est par exemple sensible à la casse
(en anglais case sensitive), cela signifie qu'un nom contenant des majuscules est différent du même nom écrit en
minuscules. Toutefois, cette règle ne s'applique pas aux fonctions, les spécifications du langage PHP précisent que la
fonction print peut être appelée print(), Print() ou PRINT().
Enfin, toute instruction se termine par un point-virgule.
Installation
Introduction
Un serveur web est un logiciel permettant de rendre accessibles à de nombreux ordinateurs (les clients) des pages web
stockées sur le disque. Cette fiche pratique explique comment installer le serveur web Apache sur un système de type
UNIX (typiquement une distribution de Linux telle que RedHat, Mandrake ou n'importe quelle autre).
Pour cela quelques connaissances sur Linux ou bien Unix sont nécessaires. Le but de cette fiche va être d'être capable
de récupérer les sources des différents éléments nécessaires et de les compiler (un compilateur C est donc
nécessaire, il est généralement installé par défaut sur la plupart des distributions Linux) afin d'avoir un système
opérationnel.
3
Langage PHP
4. cd apache_1.3.x
./configure --prefix=/www
5. Configurer PHP
6. cd ../php-3.0.x
./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
Si vous préférez installer PHP dans un autre répertoire, il faut utiliser l'option de configuration --with-config-file-
path=/path
7. Compiler PHP
8. make
make install
9. Installer Apache
10. cd ../apache_1.3.x
11. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
12. make
make install
13. Modifier le fichier de configuration de PHP
14. cd ../php-3.0.x
cp php3.ini-dist /usr/local/lib/php3.ini
15. Editez le fichier de configuration du serveur apache (généralement httpd.conf ou srm.conf et ajoutez la ligne
suivante:
Il s'agit de choisir l'extension associée aux scripts PHP. Par souci d'homogénéité, il est courant de choisir l'extension
.php3
16. Démarrez le serveur Apache. (Il est essentiel d'arrêter et redémarrer le serveur, et non uniquement de le relancer.
Il suffit généralement de taper apachectl stop, puis apachectl start).
Premier lancement
Pour vérifier si l'installation a bien fonctionnée, il vous suffit de créer un petit fichier dans la racine des documents du
serveur web (appelée DocumentRoot dans le fichier de configuration httpd.conf). Nommez ce fichier toto.php3, et
mettez le code suivant dans ce fichier:
<html>
<head><title>Exemple</title></head>
<body>
<?php
echo "PHP fonctionne!";
?>
</body>
</html>
Lancez un navigateur sur cette machine et entrez l'URL suivante:
http://localhost/toto.php3
localhost désigne la machine sur laquelle vous vous trouvez...
Vous devriez logiquement voir apparaître la phrase "PHP fonctionne!" sur
Variables
Concept de variable avec PHP
Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de
l'exécution du programme. Les variables en langage PHP peuvent être de trois types:
scalaires
tableaux
tableaux associatifs
4
Langage PHP
Quelque soit le type de variable, son nom doit obligatoirement être précédé du caractère dollar ($).
Contrairement à de nombreux langages de programmation, comme le langage C, les variables en PHP n'ont pas
besoin d'être déclarées, c'est-à-dire que l'on peut commencer à les utiliser sans en avoir averti l'interpréteur
précédemment, ainsi si la variable existait précédemment, son contenu est utilisé, sinon l'interpréteur lui
affectera la valeur en lui assignant 0 par défaut. De cette façon si vous ajoutez 3 à une nouvelle variable (non
définie plus haut dans le code), sa valeur sera 3...
Les noms de variables sont sensibles à la casse (le langage PHP fait la différence entre un nom en
majuscule et un nom en minuscules), il faut donc veiller à utiliser des noms comportant la même casse!
Toutefois, les noms de fonctions font exception à cette règle...
Variables scalaires
La langage PHP propose trois types de variables scalaires:
entiers: nombres naturels sans décimale (sans virgule)
réels: nombres décimaux (on parle généralement de type double, car il s'agit de nombre décimaux à double
précision)
chaines de caractères: ensembles de caractères
Il n'est pas nécessaire en PHP de typer les variables, c'est-à-dire de définir leur type, il suffit de leur assigner une
valeur pour en définir le type:
entiers: nombre sans virgule
réels: nombres avec une virgule (en réalité un point)
chaines de caractères: ensembles de caractères entre guillemets simples ou doubles
5
Langage PHP
En effet, certains de ces caractères ne pourraient pas être représentés autrement (un retour à la ligne ne peut pas
être représenté à l'écran). D'autre part, les caractères \ et " ne peuvent pas faire partie en tant que tel d'une
chaîne de caractère, pour des raisons évidente d'ambiguité...
Variables tableaux
Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de
nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes à gérer.
Heureusement, PHP propose des structures de données permettant de stocker l'ensemble de ces données dans une
"variable commune". Ainsi, pour accéder à ces valeurs il suffit de parcourir la variable de type complexe composée de
"variables" de type simple.
Les tableaux stockent des données sous forme de liste. Les données contenues dans la liste sont accessibles grâce à
un index (un numéro représentant l'élément de la liste). Contrairement à des langages tels que le langage C, il est
possible de stocker des éléments de types différents dans un même tableau.
Ainsi, pour désigner un élément de tableau, il suffit de faire suivre au nom du tableau l'indice de l'élément entre
crochets:
$Tableau[0] = 12;
$Tableau[1] = "CCM";
Avec PHP, il n'est pas nécessaire de préciser la valeur de l'index lorsque l'on veut remplir un tableau, car il assigne la
valeur 0 au premier élément (si le tableau est vide) et incrémente les indices suivants. De cette façon, il est facile de
remplir un tableau avec des valeurs. Le code précédent est équivalent à:
$Tableau[] = 12;
$Tableau[] = "CCM";
Lorsqu'un tableau contient d'autres tableaux, on parle de tableaux multidimensionnels. Il est possible de créer
directement des tableaux multidimensionnels en utilisant plusieurs paires de crochets pour les index (autant de paires
de crochets que la dimension voulue). Par exemple, un tableau à deux dimensions pourra être déclaré comme suit:
$Tableau[0][0] = 12;
$Tableau[0][1] = "CCM";
$Tableau[1][0] = 1245.652;
$Tableau[1][1] = "Au revoir";
D'une manière générale il est préférable de donner des noms différents aux variables locales et globales pour
des raisons de lisibilité et de compréhension du code...
Définition de constantes
Une constante est une variable dont la valeur est inchangeable lors de l'exécution d'un programme. Avec PHP, les
constantes sont définies grâce à la fonction define(). la syntaxe de la fonction define() est la suivante:
6
Langage PHP
define("Nom_de_la_variable", Valeur);
Le nom d'une constante définie à l'aide de la fonction define() ne doit pas commencer par le caractère $
(de cette façon aucune affection n'est possible).
Opérateurs
Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations,
les évaluer, ...
On distingue plusieurs types d'opérateurs:
7
Langage PHP
++ Incrémentation Augmente d'une unité la variable $x++ 8
-- Décrémentation Diminue d'une unité la variable $x-- 6
Ce type d'opérateur traite ses opérandes comme des données binaires, plutôt que des données décimales,
hexadécimales ou octales. Ces opérateurs traitent ces données selon leur représentation binaire mais retournent des
valeurs numériques standards dans leur format d'origine.
Les opérateurs suivants effectuent des opérations bit-à-bit, c'est-à-dire avec des bits de même poids.
Résultat (avec x
Opérateur Dénomination Effet Syntaxe
valant 7)
Retourne 1 si les deux bits de même poids sont à 9 & 12 (1001 &
& ET bit-à-bit 8 (1000)
1 1100)
Retourne 1 si l'un ou l'autre des deux bits de 9 | 12 (1001 |
| OU bit-à-bit 13 (1101)
même poids est à 1 (ou les deux) 1100)
Retourne 1 si l'un des deux bits de même poids est 9 ^ 12 (1001 ^
^ OU bit-à-bit 5 (0101)
à 1 (mais pas les deux) 1100)
Complément 9 ^ 12 (1001 ^
~ Retourne 1 si le bit est à 0 (et inversement) 5 (0101)
(NON) 1100)
8
Langage PHP
représentation des données
Instructions arithmétiques et logiques en assembleur
Ce type d'opérateur traite ses opérandes comme des données binaires d'une longueur de 32 bits, plutôt que des
données décimales, hexadécimales ou octales. Ces opérateurs traitent ces données selon leur représentation binaire
mais retournent des valeurs numériques standards dans leur format d'origine.
Les opérateurs suivants effectuent des rotation sur les bits, c'est-à-dire qu'il décale chacun des bits d'un nombre
de bits vers la gauche ou vers la droite. La première opérande désigne la donnée sur laquelle on va faire le
décalage, la seconde désigne le nombre de bits duquel elle va être décalée.
Résultat
Opérateur Dénomination Effet Syntaxe (avec x
valant 7)
Décale les bits vers la gauche (multiplie par 2 à chaque
6 << 1 (110
<< Rotation à gauche décalage). Les zéros qui sortent à gauche sont perdus, 12 (1100)
<< 1)
tandis que des zéros sont insérés à droite
Décale les bits vers la droite (divise par 2 à chaque
6 >> 1
Rotation à droite avec décalage). Les zéros qui sortent à droite sont perdus,
>> (0110 >> 3 (0011)
conservation du signe tandis que le bit non-nul de poids plus fort est recopié
1)
à gauche
Autres opérateurs
Les opérateurs ne peuvent pas être classés dans une catégorie spécifique maisils ont tout de même chacun leur
importance!
Résultat (avec x
Opérateur Dénomination Effet Syntaxe
valant 7)
"Bonjour"."Au
. Concaténation Joint deux chaînes bout à bout "BonjourAu revoir"
revoir"
Référencement de
$ Permet de définir une variable $MaVariable = 2;
variable
Permet d'accéder aux données $MonObjet-
-> Propriété d'un objet
membres d'une classe >Propriete
Permet d'accéder aux données $MonObjet-
-> Propriété d'un objet
membres d'une classe >Propriete
Les priorités
Lorsque l'on associe plusieurs opérateurs, il faut que le navigateur sache dans quel ordre les traiter, voici donc dans
l'ordre décroissant les priorités de tous les opérateurs:
Priorité des opérateurs
() []
-- ++ ! ~ -
* / %
+ -
< <= >= >
== !=
&
^
|
&&
||
? :
= += -= *= /= %= <<= >>= >>>= &= ^= |=
AND
XOR
Structures conditionnelle
9
Langage PHP
On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-
à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1 et false à 0). Ces structures
conditionnelles peuvent être associées à des structures qui se répètent suivant la réalisation de la condition, on
appelle ces structures des structures de boucle
La notion de bloc
Une expression suivie d'un point-virgule est appelée instruction. Par exemple a++; est une instruction.
Lorsque l'on veut regrouper plusieurs instructions, on peut créer ce que l'on appelle un bloc, c'est-à-dire un ensemble
d'instructions (suivies respectivement par des point-virgules) et comprises entre les accolades { et }.
Les instructions if, while et for peuvent par exemple être suivies d'un bloc d'instructions à exécuter...
L'instruction if
L'instruction if est la structure de test la plus basique, on la retrouve dans tous les langages (avec une syntaxe
différente...). Elle permet d'exécuter une série d'instruction si jamais une condition est réalisée.
if (condition réalisée) {
liste d'instructions
}
Remarques:
10
Langage PHP
elseif (autre condition réalisée) {
autre série d'instructions
}
...
else (dernière condition réalisée) {
série d'instructions
}
L'instruction switch
L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable. Ce branchement
conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable, car cette opération aurait été compliquée
(mais possible) avec des if imbriqués. Sa syntaxe est la suivante:
switch (Variable) {
case Valeur1:
Liste d'instructions
break;
case Valeur1:
Liste d'instructions
break;
case Valeurs...:
Liste d'instructions
break;
default:
Liste d'instructions
break;
}
Les parenthèses qui suivent le mot clé switch indiquent une expression dont la valeur est testée successivement par
chacun des case. Lorsque l'expression testée est égale à une des valeurs suivant un case, la liste d'instruction qui suit
celui-ci est exécuté. Le mot clé break indique la sortie de la structure conditionnelle. Le mot clé default précède la
liste d'instructions qui sera exécutée si l'expression n'est jamais égale à une des valeurs.
N'oubliez pas d'insérer des instructions break entre chaque test, ce genre d'oubli est difficile à détecter
car aucune erreur n'est signalée...
Les boucles
Les boucles sont des structures qui permettent d'exécuter plusieurs fois la même série d'instructions jusqu'à ce
qu'une condition ne soit plus réalisée...
On appelle parfois ces structures instructions répétitives ou bien itérations.
La façon la plus commune de faire une boucle, est de créer un compteur (une variable qui s'incrémente, c'est-à-
dire qui augmente de 1 à chaque tour de boucle) et de faire arrêter la boucle lorsque le compteur dépasse une
certaine valeur.
La boucle for
L'instruction for permet d'exécuter plusieurs fois la même série d'instructions: c'est une boucle!
Dans sa syntaxe, il suffit de préciser le nom de la variable qui sert de compteur (et éventuellement sa valeur de
départ, la condition sur la variable pour laquelle la boucle s'arrête (basiquement une condition qui teste si la valeur du
compteur dépasse une limite) et enfin une instruction qui incrémente (ou décrémente) le compteur.
La syntaxe de cette expression est la suivante:
for (compteur; condition; modification du compteur) {
liste d'instructions
}
11
Langage PHP
Par exemple:
for (i=1; i<6; i++) {
printf("%d", i);
}
Cette boucle affiche 5 fois la valeur de i, c'est-à-dire 1,2,3,4,5
Elle commence à i=1, vérifie que i est bien inférieur à 6, etc... jusqu'à atteindre la valeur i=6, pour laquelle la
condition ne sera plus réalisée, la boucle s'interrompra et le programme continuera son cours.
D'autre part, le langage C++ autorise la déclaration de la variable de boucle dans l'instruction for elle-même!
Par exemple:
for (int i=0; i<10; i++) {
printf("%d", i);
}
il faudra toujours vérifier que la boucle a bien une condition de sortie (i.e le compteur s'incrémente
correctement)
une instruction printf(); dans votre boucle est un bon moyen pour vérifier la valeur du compteur pas à
pas en l'affichant!
il faut bien compter le nombre de fois que l'on veut faire exécuter la boucle:
o for(i=0;i<10;i++) exécute 10 fois la boucle (i de 0 à 9)
o for(i=0;i<=10;i++) exécute 11 fois la boucle (i de 0 à 10)
o for(i=1;i<10;i++) exécute 9 fois la boucle (i de 1 à 9)
L'instruction while
L'instruction while représente un autre moyen d'exécuter plusieurs fois la même série d'instructions.
La syntaxe de cette expression est la suivante:
while (condition réalisée) {
liste d'instructions
}
Cette instruction exécute la liste d'instructions tant que (while est un mot anglais qui signifie tant que) la condition
est réalisée.
La condition de sortie pouvant être n'importe quelle structure conditionnelle, les risques de boucle infinie
(boucle dont la condition est toujours vraie) sont grands, c'est-à-dire qu'elle risque de provoquer un
plantage du navigateur!
Saut inconditionnel
Il peut être nécessaire de faire sauter à la boucle une ou plusieurs valeurs sans pour autant mettre fin à celle-ci.
La syntaxe de cette expression est "continue;" (cette instruction se place dans une boucle!), on l'associe
généralement à une structure conditionnelle, sinon les lignes situées entre cette instruction et la fin de la boucle
seraient obsolètes.
Exemple: Imaginons que l'on veuille imprimer pour x allant de 1 à 10 la valeur de 1/(x-7) ... il est évident que pour
x=7 il y aura une erreur. Heureusement, grâce à l'instruction continue il est possible de traiter cette valeur à part puis
de continuer la boucle!
x=1
while (x<=10) {
if (x == 7) {
printf("Division par zéro!");
continue;
}
a = 1/(x-7);
printf("%d", a);
x++
}
Il y avait une erreur dans ce programme... peut-être ne l'avez-vous pas vue:
Lorsque x est égal à 7, le compteur ne s'incrémente plus, il reste constamment à la valeur 7, il aurait fallu écrire:
x=1
while (x<=10) {
if (x == 7) {
printf("division par 0");
x++;
continue;
}
a = 1/(x-7);
printf("%d", a);
12
Langage PHP
x++
}
Arrêt inconditionnel
A l'inverse, il peut être voulu d'arrêter prématurément la boucle, pour une autre conditon que celle précisé dans l'en-
tète de la boucle. L'instruction break permet d'arrêter une boucle (for ou bien while). Il s'agit, tout comme continue,
de l'associer à une structure conditionnelle, sans laquelle la boucle ne ferait jamais plus d'un tour!
Dans l'exemple de tout à l'heure, par exemple si l'on ne savait pas à quel moment le dénominateur (x-7) s'annule
(bon...OK...pour des équations plus compliquées par exemple) il serait possible de faire arrêter la boucle en cas
d'annulation du dénominateur, pour éviter une division par zéro!
for (x=1; x<=10; x++) {
a = x-7;
if (a == 0) {
printf("division par 0");
break;
}
printf("%d", 1/a);
}
Les fonctions
La notion de fonction
On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instruction par simple appel de la
fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du
programme une série d'instructions, cela permet une simplicité du code et donc une taille de programme
minimale. D'autre part, une fonction peut faire appel à elle-même, on parle alors de fonction récursive (il ne
faut pas oublier de mettre une condition de sortie au risque sinon de ne pas pouvoir arrêter le programme...).
PHP recèle de nombreuses fonctions intégrées permettant d'effectuer des actions courantes. Toutefois, il est possible
de définir des fonctions, dites fonctions utilisateurs afin de simplifier l'exécution de séries d'instructions répétitives.
Contrairement à de nombreux autres langages, PHP nécessite que l'on définisse une fonction avant que celle-ci puisse
être utilisée, car pour l'appeler dans le corps du programme il faut que l'interpréteur la connaisse, c'est-à-dire qu'il
connaisse son nom, ses arguments et les instructions qu'elle contient. La définition d'une fonction s'appelle
"déclaration" et peut se faire n'importe où dans le code. La déclaration d'une fonction se fait grâce au mot-clé
function, selon la syntaxe suivante:
liste d'instructions
}
Remarques:
le nom de la fonction suit les mêmes règles que les noms de variables:
o le nom doit commencer par une lettre
o un nom de fonction peut comporter des lettres, des chiffres et les caractères _ et & (les espaces ne sont pas
autorisés!)
o le nom de la fonction, comme celui des variables est sensible à la casse (différenciation entre les minuscules
et majuscules)
Les arguments sont facultatifs, mais s'il n'y a pas d'arguments, les parenthèses doivent rester présentes
Il ne faut pas oublier de refermer les accolades
13
Langage PHP
Le nombre d'accolades ouvertes (fonction, boucles et autres structures) doit être égal au nombre
d'accolades fermées!
La même chose s'applique pour les parenthèses, les crochets ou les guillemets!
Une fois cette étape franchie, votre fonction ne s'exécutera pas tant que l'on ne fait pas appel à elle quelque part
dans la page!
Appel de fonction
Pour exécuter une fonction, il suffit de faire appel à elle en écrivant son nom (une fois de plus en respectant la casse)
suivie d'une parenthèse ouverte (éventuellement des arguments) puis d'une parenthèse fermée:
Nom_De_La_Fonction();
Remarques:
le point virgule signifie la fin d'une instruction et permet à l'interpréteur de distinguer les différents blocs
d'instructions
si jamais vous avez défini des arguments dans la déclaration de la fonction, il faudra veiller à les inclure lors de
l'appel de la fonction (le même nombre d'arguments séparés par des virgules!)
Nom_De_La_Fonction(argument1, argument2);
return valeur_ou_variable;
<?
function dire_texte($qui, $texte = 'Bonjour')
{
}
?>
Ainsi cette fonction peut être appelée de deux façons différentes:
<?
14
Langage PHP
?>
<?
function ajoute_camion($mode='')
{
global $chaine;
static $nb=0;
if($mode == "affiche"){
echo $chaine.$nb; // on affiche le nombre de camions
}
ajoute_camion(); // nb == 1
ajoute_camion(); // nb == 2
ajoute_camion(); // nb == 3
ajoute_camion("affiche"); // affiche Nombre de camions : 4
?>
<?
function dire_texte($qui, &$texte)
{
$texte = "Bienvenue $qui";
}
>?
function nom_fonction()
{
.....
15
Langage PHP
// on retourne les valeurs voulues dans un tableau
}
$retour = nom_fonction();
echo "$retour[0] - $retour[1] - $retour[2]";
?>
La récursivité
Les fonctions récursives sont des fonctions qui s'appellent elles-mêmes. Ce type de fonction se révèle indispensable
pour parcourir une arborescence par exemple.
Voici un exemple simple.
<?
function fonction_recursive($n=0)
{
$n++;
echo "$n <br>";
if($n < 10){ // si n est inférieur à 10 on continue
fonction_recursive($n);
}
}
fonction_recursive(); // affiche les nb de 1 à 10
?>
Les classes
La notion de classe
Php3 intègre un soupçon de caractéristiques empruntées aux langages orientés objet, c'est-à-dire la possibilité d'utiliser
des objets, entités regroupant des données et des fonctions au sein d'une structure et rendant la programmation plus
simple qu'en programmation habituelle (appelée programmation procédurale par opposition à la programmation orientée
objet).
On appelle classe la structure d'un objet, c'est-à-dire la déclaration de l'ensemble des entités qui composeront un
objet. Un objet est donc "issu" d'une classe, c'est le produit qui sort d'un moule. En réalité on dit qu'un objet est une
instanciation d'une classe, c'est la raison pour laquelle on pourra parler indifféramment d'objet ou d'instance
(éventuellement d'occurence).
Les attributs (parfois appelés données membres): il s'agit des données représentant l'état de l'objet
Les méthodes (parfois appelées fonctions membres): il s'agit des opérations applicables aux objets
class Nom_de_la_classe {
// Déclarations des données membres
var $Donnee_Membre_1;
var $Donnee_Membre_2;
var $...
// Déclarations des données membres
function Nom_de_la_fonction_membre1(parametres) {
liste d'instructions;
}
};
Nom_de_la_classe représente bien évidemment le type d'objet désigné par la classe ou du moins le nom que vous
leur attribuez.
16
Langage PHP
Contrairement aux langages orientés objet comme le C++, Php n'inclue pas dans sa version 3 de niveaux de visibilité
des éléments de la classe, il n'y a donc pas de concept d'encapsulation, un des concepts majeurs de la
programmation orientée objet.
Contrairement à la déclaration de classes en C++, la déclaration de la classe ne se finit pas par un point-
virgule!
Instanciation de la classe
Après avoir déclaré une classe, il faut instancier des objets pour pouvoir l'exploiter. Cette opération se fait à l'aide du
mot clé new permettant de faire des objets découlant d'une classe. La syntaxe du mot clé new est la suivante:
Nom_de_l_objet->Nom_de_la_donnee_membre = Valeur;
Nom_de_l_objet->Nom_de_la_donnee_fonction_membre(parametre1,parametre2,...);
class Toto{
var $age;
var $sexe;
var $adresse;
function DefineTotoAge($Age){
$this->age = Age;
}
}
Affichage de texte
17
Langage PHP
Le but de Php est de permettre la création de page web dynamiques, ainsi son but premier est de pouvoir
envoyer des données au navigateur.
Php3 fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces fonctions ont la particularité de pouvoir
insérer dans les données envoyées des valeurs variables, pouvant être fonction d'un valeur récupérée par exemple,
c'est ce qui rend possible la création de pages dynamiques. Les 3 fonctions sont les suivantes:
echo
print
printf
La fonction echo
La fonction echo permet d'envoyer au navigateur la chaîne de caractères (délimitée par des guillemets) qui la suit. La
syntaxe de cette fonction est la suivante:
echo Expression;
L'expression peut être une chaîne de caractères ou une expression que l'interpréteur évalue
echo "Chaine de caracteres";
echo (1+2)*87;
Ainsi, étant donné que la chaîne de caractères est délimitée par des guillemets, l'insertion de guillemets doubles
dans la chaîne provoquerait une erreur. C'est la raison pour laquelle les guillemets doubles, ainsi que tous les
caractères spéciaux, doivent être précédés d'un antislash. Voici un récapitulatif des caractères spéciaux
nécessitant l'ajout d'un antislash:
Caractère Description
\" guillemet
\$ caractère $
\\ barre oblique inverse (antislash)
\r retour chariot
\n retour à la ligne
\t tabulation
Le caractère $ a un rôle particulier dans la mesure où l'interpréteur le comprend comme une variable, ce qui signifie
que lorsque le caractère $ est rencontré dans la chaîne qui suit la fonction echo, l'interpréteur récupère le nom de la
variable qui suit le caractère $ et le remplace par sa valeur. Dans l'exemple suivant par exemple, on assigne la date
actuelle à une variable appelée $MaDate, puis on l'affiche sur le navigateur:
<HEAD>
<TITLE>Affichage de l'heure</TITLE>
<BODY>
<?php
// Récupération de la date
// et stockage dans une variable
$MaDate = date("Y");
echo "<HTML>";
echo "Nous sommes en $MaDate";
?>
</BODY>
<HTML>
La fonction print
La fonction print est similaire à la fonction echo à la différence près que l'expression à afficher est entre parenthèses.
La syntaxe de la fonction print est la suivante:
18
Langage PHP
print(expression);
L'expression peut, comme pour la fonction echo être une chaîne de caractères ou une expression que l'interpréteur
évalue:
print("Chaine de caracteres");
print ((1+2)*87);
La fonction printf
La fonction printf (empruntée au langage C) est rarement utilisée car sa syntaxe est plus lourde. Toutefois,
contrairement aux deux fonctions précédentes, elle permet un formatage des données, cela signifie que l'on peut
choisir le format dans lequel une variable sera affichée à l'écran.
La syntaxe de printf est la suivante:
printf (chaîne formattée);
Une chaîne formattée est une chaîne contenant des codes spéciaux permettant de repérer l'emplacement d'une valeur
à insérer et son format, c'est-à-dire sa représentation. A chaque code rencontré doit être associé une valeur ou une
variable, que l'on retrouve en paramètre à la fin de la fonction printf. Les valeurs à insérer dans la chaîne
formattées sont séparées par des virgules et doivent apparaître dans l'ordre où les codes apparaissent dans la
chaîne formattée Les codes de formatage des types de données sont les suivants:
Code Type de format
%b Entier en notation binaire
%c Caractère codé par son code ASCII
%d Entier en notation décimale
%e Type double (nombre à virgule) au format scientifique (1.76e+3)
%f Type double (nombre à virgule)
%o Entier en notation octale
%s Chaîne de caractères
%x Entier en notation hexadécimale (lettres en minuscules)
%X Entier en notation hexadécimale (lettres en majuscules)
%% Caractère %
Imaginons que l'on définisse une variable en virgule flottante, afin d'obtenir une précision de calcul plus grande
qu'avec un entier, mais qu'on désire l'afficher en tant qu'entier. Dans ce cas la fonction printf prend toute son
importance:
$Pi = 3.1415927;
$R = 24.546;
$Perimetre = 2 * $Pi * $R;
printf ("Le périmètre du cercle est %d",$Perimetre);
Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant
au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du script PHP est:
Le serveur
Le client
Ces variables sont créées par le serveur à chaque fois que le script PHP est appelé, le serveur les lui fournit en
paramètres cachés lors de l'exécution de l'interpréteur.
Elles permettent notamment d'avoir des informations sur le type de serveur, son administrateur, la date à
laquelle le script a été appelé, l'adresse IP et le type de navigateur du client,...
19
Langage PHP
20
Langage PHP
$SERVER_PORT Numéro de port associé au protocole HTTP sur le serveur
$SERVER_PROTOCOL Nom et version du protocole utilisé pour envoyer la requête au script PHP
Type (logiciel) du serveur web
Pour un serveur Apache sous Unix:
<?
phpinfo();
?>
PHP fournit la fonction getenv() permettant de retourner la valeur de la variable d'environnement passée en
paramètre:
<?
echo getenv("HTTP_USER_AGENT");
?>
Enfin il est possible de définir des variables d'environnement:
<?
echo putenv("MA_VARIABLE=mavaleur");
?>
Les Fichiers
Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de
fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier est repérée par
une variable, indiquant l'état du fichier et que l'on peut passer en paranètre aux fonctions spécialisées pour le
manipuler.
La fonction fopen()
La fonction de base est la fonction fopen(). C'est elle qui permet d'ouvrir un fichier, que ce soit pour le lire, le créer,
ou y écrire. Voilà sa syntaxe :
Lorsque le mode est suivie du caractère + celui-ci peut être lu et écrit. Enfin, le fait de faire suivre le mode par la
lettre b entre crochets indique que le fichier est traité de façon binaire.
Voici un tableau récapitulant l'ensemble des modes de fichiers possibles:
Mode Description
21
Langage PHP
w ouverture en écriture seulement (la fonction crée le fichier s'il n'existe pas)
ouverture en écriture seulement avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe
a
pas)
w+ ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas)
ouverture en lecture et écriture avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe
a+
pas)
<?
$fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier
while (!feof($fp)) { //on parcoure toutes les lignes
$page .= fgets($fp, 4096); // lecture du contenu de la ligne
}
?>
Il est généralement utile de tester si l'ouverture de fichier s'est bien déroulée ainsi que d'éventuellement stopper le
script PHP si cela n'est pas le cas:
<?
if (!$fp = fopen("http://www.commentcamarche.net","r")) {
echo "Echec de l'ouverture du fichier";
exit;
}
else {
// votre code;
}
?>
Un fichier ouvert avec la fonction fopen() doit être fermé, à la fin de son utilisation, par la fonction
fclose() en lui passant en paramètre l'entier retourné par la fonction fopen()
Lecture et écriture
Une fois que le fichier a été ouvert avec le mode désiré, il est possible de lire son contenu et d'y écrire des
informations grâce aux fonctions:
fputs() (aussi parfois appelée fwrite(), les deux noms sont équivalents, on parle d'alias)permettant d'écrire une
chaîne de caractères dans le fichier
booléen fputs(entier Etat_du_fichier, chaine Sortie);
22
Langage PHP
Le paramètre Longueur désigne le nombre de caractères maximum que la fonction est sensée récupérer sur la ligne.
La fonction fgets() renvoie 0 en cas d'échec, 1 dans le cas contraire
Etant donné que la fonction fgets() récupére à chaque appel une nouvelle ligne du fichier, il est essentiel, pour
récupérer l'intégralité du contenu d'un fichier de l'insérer dans une boucle while.
Ainsi, on utilise la fonction feof(), fonction testant si la fin du fichier n'a pas été atteinte, en tant que test de la boucle
while. De cette façon, tant que la fin du fichier n'a pas été atteinte, on lit la ligne suivante du fichier...
<?
if (!$fp = fopen("fichier.txt","r")) {
echo "Echec de l'ouverture du fichier";
exit;
}
else {
while(!feof($fp)) {
$Ligne = fgets($fp,255); // On récupère une ligne
echo $Ligne; // On affiche la ligne
$Fichier .= $Ligne; // On stocke l'ensemble des lignes dans une variable
}
fclose($fp); // On ferme le fichier
}
?>
Pour stocker des infos dans le fichier, il faut dans un premier temps ouvrir le fichier en écriture en le créant si il
n'existe pas. On a donc le choix entre le mode 'w' et le mode 'a'. On préférera le second puisque le pointeur se trouve
en fin de fichier (autrement dit on écrit à la suite de ce qui se trouve dans le fichier au lieu d'écraser le contenu
existant éventuellement déjà).
<?
$fp = fopen("php_8_fichier.txt","a"); // ouverture du fichier en écriture
fputs($fp, "\n"); // on va a la ligne
fputs($fp, "$nom|$email"); // on écrit le nom et email dans le fichier
fclose($fp);
?>
Voici un petit script permettant de récupérer le titre d'une page Web (le texte compris entre les balises <TITLE> et
</TITLE>). Il utilise les expressions régulières pour localiser le texte.
<?
$fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier
while (!feof($fp)) { //on parcoure toutes les lignes
$page .= fgets($fp, 4096); // lecture du contenu de la ligne
}
$titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre
echo $regs[1];
fclose($fp);
?>
<?
if (!is_dir("install")) {
echo "Il ne s'agit pas d'un répertoire
";
}
else {
23
Langage PHP
echo "Il s'agit bien d'un répertoire
";
}
?>
is_executable() permet de savoir si le fichier dont le nom est passé en paramètre est exécutable
is_file() permet de savoir si le fichier dont le nom est passé en paramètre ne correpond ni à un répertoire, ni à un
lien symbolique
is_dir() permet de savoir si le fichier dont le nom est passé en paramètre correpond à un lien symbolique
La fonction is_link() renvoie 1 si il s'agit d'un lien symbolique, 0 dans le cas contraire
<?
$Fichier = "fichier.txt";
if (is_file($Fichier)) {
if ($TabFich = file($Fichier)) {
for($i = 0; $i < count($TabFich); $i++)
echo $TabFich[$i];
}
else {
echo "Le fichier ne peut être lu...<br>";
}
}
else {
echo "Désolé le fichier n'est pas valide<br>";
}
?>
La fonction fpassthru() permet d'envoyer le contenu du fichier dans la fenêtre du navigateur. La syntaxe de cette
fonction est la suivante:
booléen fpassthru(entier etat);
Cette fonction permet en réalité d'envoyer le contenu du fichier à partir de la position courante dans le fichier, c'est-à-
dire qu'il est possible par exemple de lire quelques lignes avec fgets(), puis d'envoyer le reste au navigateur... Le
script suivant permet de parcourir tous les fichiers HTML contenus dans votre site à la recherche de MetaTags:
<
function ScanDir($Directory){
echo "<b>Processing</b>: $Directory<br>\n";
24
Langage PHP
if($MyDirectory = opendir($Directory)) {
while($Entry = readdir($MyDirectory)) {
if (is_dir($Directory."/".$Entry)) {
if (($Entry != ".") && ($Entry != "..")) {
echo "<b>Repertoire</b>: $Directory/$Entry<br>\n";
ScanDir($Directory."/".$Entry);
}
}
else {
echo "<b>Fichier</b>: $Directory/$Entry
\n";
if (eregi("(\.html)|(\.htm)",$Entry)){
$MetaTags = get_meta_tags($Directory."/".$Entry);
}
}
}
}
closedir($MyDirectory);
}
}
}
$open_basedir=\".\";
ScanDir(".");
?>
Récupération de données
Php rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML.
Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant:
Pour utiliser un tel formulaire capable d'envoyer des informations à un script Php3, il suffit de mettre le nom du fichier
Php3 qui réceptionnera les informations en tant que valeur de l'attribut ACTION de la balise FORM.
Voici ce à quoi peut ressembler un formulaire en HTML, permettant d'envoyer les coordonnées d'une personne à un
fichier Php3 nommé test.php3:
25
Langage PHP
Nom :
Prénom :
Age :
Si jamais un des champs du formulaire n'est pas rempli, il possède la valeur "", c'est-à-dire une chaîne vide...
Voici par exemple ce à quoi pourrait ressembler le fichier test.php3, dont le but est uniquement d'afficher les
informations saisies par l'utilisateur à l'écran, ainsi que de vérifier que tous les champs ont bien été correctement
rempli:
<HTML>
<HEAD>
<TITLE>Test.php3: Affichage des données utilisateur</TITLE>
</HEAD>
<BODY>
<?php
if (($nom=="")||($prenom=="")||($age=="")){
else {
echo "Récapitulatif des informations saisies<BR>\n
<UL>
<LI>Nom: $nom</LI>
<LI>Prenom: $prenom</LI>
<LI>Age: $age</LI>
</UL>
";
}
?>
</BODY>
</HTML>
Base de données
Php permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est
pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec
les bases de données.
La communication avec les bases de données se fait à l'aide de requêtes SQL, un langage de quatrième génération
reconnu par l'ensemble des SGBD.
26
Langage PHP
Dans les exemples ci-dessous, le système de gestion de bases de données utilisé est MySQL, un SGBD gratuit et
rapide fonctionnant (entre autres) sous Linux. Etant donné que la majorité des serveurs Web (dont le fameux
serveur Apache) fonctionnent sous Linux, MySQL est de ce fait le SGBD le plus utilisé avec Php.
La première étape consiste à déclarer les variables qui vont permettre la connexion à la base de données (ce sont les
paramètres des fonctions de connexion à la base). Ces variables sont:
Rappel: Les variables ne sont pas visibles par vos visiteurs étant donné que le script (portant
l'extension .php3) est systématiquement interprété par le serveur Web
Ces variables sont en fait des paramètres de la fonction permettant la connexion à la base de données. Il est
donc possible de passer les valeurs de ces variables directement dans chaque fonction permettant la connexion,
mais cela devient vite gênant lors d'un changement de mot de passe par exemple. Le comble de l'élégance
voudrait que l'on stocke ces valeurs dans un fichier à part, afin de changer les valeurs dans tous les fichiers y
faisant référence en un seule fois.
$connect = mysql_connect($host,$user,$password);
L'utilisation de la fonction die() en cas d'erreur d'exécution. Si la fonction retourne la valeur 0 (c'est-à-dire s'il y a
une erreur) la fonction die() (traduisez meurt) renvoie un message d'erreur. Par exemple:
27
Langage PHP
<html>
<head>
<title>Liens</title>
<head>
<body>
<?php
// Déclaration des paramètres de connexion
$host = la_machine;
// Généralement la machine est localhost
// c'est-a-dire la machine sur laquelle le script est hébergé
$user = votre_login;
$bdd = Nom_de_la_base_de_donnees;
$password = Mot_de_passe;
// Connexion au serveur
mysql_connect($host, $user,$password) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
echo "<tr>\n
<td><a href=\"$Url\">$Nom</a></td>\n
<td>$Url</td>\n
</tr>\n";
</tr>
</table>
</body>
</html>
Dans l'exemple ci-dessus, les requête retourne les champs nom et url. La fonction mysql_fetch_row() analyse donc
chaque ligne de résultat de la requête et stocke les colonnes dans le tableau row[]. Ainsi, le champ nom sera stocké
dans row[0] et url dans row[1]. D'autre part, on inclue généralement mysql_fetch_row() dans une boucle while de
telle façon à ce que l'ensemble des lignes de résultat soient traitées. Lorsqu'il n'y a plus de ligne à traiter, la
boucle while se termine et l'interpréteur exécute la suite des instructions.
28
Langage PHP
une clause WHERE permettant de vérifier la présence ou non d'enregistrements correspondant à la requête. La non
présence de résultat se traduit par un retour nul de la part de la fonction mysql_fetch_row(). Voici un exemple
affichant le résultat d'une requête le cas échéant, et dans le cas contraire une phrase exmpliquant qu'aucun
enregistrement correspondant n'a été trouvé (le code HTML dans lequel le code PHP doit être implanté a
volontairement été omis):
<?php
// Déclaration des paramètres de connexion
$host = la_machine;
// Généralement la machine est localhost
// c'est-a-dire la machine sur laquelle le script est hébergé
$user = votre_login;
$bdd = Nom_de_la_base_de_donnees;
$password = Mot_de_passe;
// Connexion au serveur
mysql_connect($host, $user,$password) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
if (!mysql_fetch_row($result)) {
echo "Aucun enregitrement ne correspond\n";
}
else {
while($row = mysql_fetch_row($result)){
$Nom = $row[0];
$Url = $row[1];
echo "<tr>\n
<td><a href=\"$Url\">$Nom</a></td>\n
<td>$Url</td>\n
</tr>\n";
}
}
Expressions régulières
Qu'est-ce qu'une expression régulière?
Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de
caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au modèle. Ce système est
emprunté au système POSIX (un système d'exploitation). De nombreux scripts sous UNIX les utilisent (notamment
Perl).
En réalité il s'agit d'un système fort ingénieux (et aussi très puissant) permettant de retrouver un mot, ou une
phrase (et même beaucoup d'autres choses en réalité) dans un texte, ressemblant au modèle que l'on a
construit...
29
Langage PHP
Les expressions régulières permettent de rechercher des occurences (c'est-à-dire une suite de caractères
correspondant à ce que l'on recherche) grâce à une série de caractères spéciaux. L'expression réguliè en elle-même
est donc une chaîne de caractère contenant des caractères spéciaux et des caractères standards...
Les symboles ^ et $ indiquent le début ou la fin d'une chaine, et permettent donc de la délimiter.
"abc+": chaine qui contient "ab" suivie de un ou plusieurs "c" ("abc", "abcc" etc..)
"abc*": chaine qui contient "ab" suivie de zero ou plusieurs "c" ("ab", "abc" etc..)
"abc?": chaine qui contient "ab" suivie de zero ou un "c" ("ab" ou "abc")
"^abc+": chaine qui commence par "ab" suivie de un ou plusieurs "c" ("abc", "abcc" etc..)
Les accolades {X,Y} permettent de donner des limites de nombre.
30
Langage PHP
| Occurence de l'élément situé à gauche de cet opérateur ou de celui situé à droite (lard|cochon)
Placé en début d'expression il signifie "chaîne commençant par .. "
^
Utilisé à l'intérieur d'une liste il signifie "ne contenant pas les caractères suivants...
$ Placé en fin d'expression il signifie "chaîne finissant par .. "
[:classe:]
Les classes de caractères sont celles définies par UNIX. Voici un tableau récapitulant certaines de ces classes:
Nom de la classe Description
[:alnum:] caractères alphanumériques (équivalent à [A-Za-z0-9])
[:alpha:] caractères alphabétiques ([A-Za-z])
[:blank:] caractères blanc (espace, tabulation)
[:ctrl:] caractères de contrôe (les premiers du code ASCII
[:digit:] chiffre ([0-9])
[:graph:] caractère d'imprimerie (qui fait une marque sur l'écran en quelque sorte)
[:print:] caractère imprimable (qui passe à l'imprimante ... tout sauf les caractères de contrôle)
[:punct:] caractère de ponctuation
[:space:] caractère d'espacement
[:upper:] caractère majuscule
[:xdigit:] caractère hexadécimal
Voici quelques exemples d'utilisation des classes de caractère dans une expression régulière :
chaine composée d'un ou plusieurs caractère(s) alphanumerique(s)
"^[:alnum:]+$"
chaine contenant un caractère de ponctuation ou un caractère d'espacement
"[:punct:]|[:space:]"
Un nombre
"^[:digit:]+$"
<?
$fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier
while (!feof($fp)) { //on parcoure toutes les lignes
$page .= fgets($fp, 4096); // lecture du contenu de la ligne
}
$titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre
/* Le titre commence par <title>,
puis contient n'importe quelle chaine,
et se termine par </title> */
echo $regs[1]; // on retourne la premiere occurence trouvée
// Les occurences se trouvent entre parenthèses
31
Langage PHP
// $regs[0] renvoie toute la chaine
fclose($fp);
?>
Le code suivant (utilisation avancée des expressions régulières) remplace un URL par un hypertexte HTML (il remplace
toute suite de caractères de ponctuations et alphanum&eacuyte;riques commençant par http://, ou ftp:// par le
même texte (sans le http://) entre balises HTML hypertexte...):
La fonction split()
La fonction split() possède la syntaxe suivante:
<?
// découpe une phrase en un tableau de mots
// on utilise split au cas ou plusieurs espaces séparent les mots
$phrase = "Ceci est une phrase avec trois espaces ici";
$tableau_mots = split(" +",trim($phrase)); // un espace ou plus
?>
La fonction sql_regcase()
La fonction sql_regcase() possède la syntaxe suivante:
<?
echo sql_regcase("un test");
// affiche [Uu][Nn][ ][Tt][Ee][Ss][Tt]
?>
Cette fonction permet de générer une chaine non sensible à la casse, pour les expressions régulières dans les bases
de données par exemple. Dans MySQL lorsque vous utilisez la fonction REGEXP (au lieu de LIKE) la recherche est
sensible à la casse. La solution est donc de générer une chaine non sensible à la casse à l'aide de sql_regcase.
<?
$motclef = sql_regcase("motclef");
$sql = "SELECT * from table WHERE champ REGEXP "[[:<:]]$motclef[[:>:]]";
// selectionne tous les enregistrements de la table table, contenant le MOT motclef
32
Langage PHP
?>
Prérequis
PHP permet de créer des images au format GIF à l'aide d'une librairie de fonctions prévue à cet effet. La librairie
permettant de créer et manipuler des fichiers graphiques se nomme GD, ainsi, pour pouvoir utiliser ces fonctions il
faut que PHP soit installé avec l'extension GD, c'est-à-dire passer le paramètre --with-gd.
La librairie de fonctions GD permet de créer assez facilement des fichiers au format GIF, en fonction par
exemple de données stockées dans un SGBD (Système de gestion de bases de données). Il faut tout de même
savoir que ce genre de procédé met à rude épreuve le processeur, il faut donc utiliser ces fonctions à bon escient
(par exemple pour des diagrammes statistiques à barre, des graphiques sectoriels, ...).
Les fonctions de la librairies GD permettent de retourner une image, c'est-à-dire un fichier GIF. Ainsi un tel fichier ne
peut envoyer du texte au navigateur, il doit obligatoirement être appelé à partir d'une page HTML (généralement
avec une balise <IMG src="mon_fichier.php3">).
D'autre part, pour que le navigateur sache qu'il s'agit d'un fichier de type GIF, la premiere chose à faire (avant
d'envoyer n'importe quelle autre information au navigateur) est d'envoyer un en-tête HTTP indiquant le type MIME du
fichier, c'est-à-dire:
headers("Content-Type: image/gif");
La principale fonction de la librairie est imagegif() elle permet de retourner au navigateur l'image créée avec les
autres fonctions, en passant en paramètres un entier identifiant l'image. Si jamais le nom du fichier est passé en
second argument, le fichier est écrit sur le disque.
La fonction imagecreate() permet de créer un identifiant pour une image vierge possèdant les dimensions indiquées
en paramètres.
<?php
headers("Content-Type: image/gif");
$image = imagecreatefromgif("toto.gif");
imagegif($image);
?>
L'allocation de couleur
La majeure partie des fonctions de la librairie GD permettent de créer une image,
33
Langage PHP
en dessinant des formes (trait, rectangle, cercle, ...)
en allouant des couleurs à l'image
en dessinant des chaînes de caractères
...
La plupart des fonctions graphiques nécessitent le passage en paramètre d'une couleur. Ainsi, PHP fournit des
fonctions permettant d'allouer une couleur à une image en spécifiant les composantes RGB (Red, Green, Blue soient
Rouge, Vert et Bleu) de la couleur.
La fonction imagecolorallocate() alloue une couleur à une image en spécifiant ses composantes RGB sous forme
entière (0 à 255 pour chaque composante), ou hexadécimale (0x00 à 0xFF pour chaque composante).
$noir = imagecolorallocate($image,0,0,0);
$rouge = imagecolorallocate($image,255,0,0);
$vert = imagecolorallocate($image,0,0xFF,0);
La création de formes
La librairie GD fournit un panel de fonctions permettant de créer des formes primaires telles que:
des rectangles
des ellipses (donc des cercles)
des arcs
des lignes
Généralement ces fonctions admettent en premier paramètre l'identifiant de l'image dans laquelle la forme doit
être créée, puis les coordonnées permettant de générer la forme, et enfin la couleur de l'élément. Elles
retournent 1 si l'élément a pu être dessiné, 0 dans le cas contraire
Voici un tableau présentant les fonctions de génération de forme:
Fonction Description
Crée un arc de centre (x,y) dont la largeur et la hauteur sont en
imagearc(entier image,entier x,entier y,entier
pixels. Début et fin représentent les angles de début et de fin (le
largeur,entier hauteur,entier début,entier fin,entier
degré 0 est à trois heures) en tournant dans le sens des
couleur)
aiguilles d'un montre
imagedashedline(entier image,entier xdebut,entier Trace un trait pointillé entre les points (xdebut,ydebut) et
ydebut,entier xfin,entier yfin,entier couleur) (xfin,yfin) de la couleur spécifiée
Crée un polygone de la couleur spécifiée, dont les points sont
imagefilledpolygon(entier image,tableau
stockes dans un tableau de valeurs (x,y). Le nombre de points
coordonnees,entier nonbre,entier couleur)
du tableau à utiliser est spécifié en paramètre nombre
imagefilledrectangle(entier image,entier Crée un rectangle rempli avec la couleur spécifiée, et dont les
xgauchehaut,entier ygauchehaut,entier coins supérieur gauche et inférieur droit sont spécifiés en
xdroitebas,entier ydroitebas,entier couleur) argument
imageline(entier image,entier xdebut,entier Trace un trait entre les points (xdebut,ydebut) et (xfin,yfin) de
ydebut,entier xfin,entier yfin,entier couleur) la couleur spécifiée
Crée un polygone non rempli dont le contour est de la couleur
imagepolygon(entier image,tableau spécifiée, dont les points sont stockes dans un tableau de
coordonnees,entier nonbre,entier couleur) valeurs (x,y). Le nombre de points du tableau à utiliser est
spécifié en paramètre nombre
imagerectangle(entier image,entier Crée un rectangle nom rempli dont le contour est de la couleur
xgauchehaut,entier ygauchehaut,entier spécifiée, et dont les coins supérieur gauche et inférieur droit
xdroitebas,entier ydroitebas,entier couleur) sont spécifiés en argument
Voici un exemple montrant comment créer des formes simples avec PHP:
<?php
$image = imagecreate(160,100);
$fond = imagecolorallocate($image,0xEF,0xF2,0xFB);
$noir = imagecolorallocate($image,0,0,0);
imagefill($image,0,0,$fond);
imagefilledpolygon($image,array(80,15,45,85,125,85),3,$noir);
header("Content-Type: image/gif");
imagegif($image);
34
Langage PHP
?>
Deux fonctions supplémentaires vous permettront de remplir une zone avec une couleur:
Fonction Description
Remplit une zone d'une même couleur par la couleur spécifiée en
imagefill(entier image,entier x,entier y,entier
argument, en commençant le remplissage à partir du point indiqué en
couleur)
paramètre
Remplit une zone délimitée par une bordure d'une couleur, par la
imagetoborder(entier image,entier x,entier
couleur spécifiée en argument, en commençant le remplissage à partir
y,entier couleurbordure,entier couleur)
du point indiqué en paramètre
<?
35
Langage PHP
header("Content-type: image/gif");
$host="votre.base.de.donnees";
$user="votre.login";
$pass="votre.mot.de.passe";
$bdd="nom_de_la_base";
mysql_connect($host,$user,$pass);
mysql_select_db($bdd);
$query="SELECT navigateur FROM visiteurs";
$result=mysql_query($query);
$netscape3=0;
$netscape4=0;
$ie3=0;
$ie4=0;
$ie5=0;
$autre=0;
while($row=mysql_fetch_row($result))
{
$total++;
if(ereg("3(\.)([0-9]+) (\[)([a-z]+)(\])(.*)$",$row[0]))
{
$netscape3++;
}
if(ereg("4(\.)([0-9]+) (\[)([a-z]+)(\])(.*)$",$row[0]))
{
$netscape4++;
}
if(ereg("MSIE(\_?)( ?)3",$row[0]) )
{
$ie3++;
}
if(ereg("MSIE(\_?)( ?)4",$row[0]) )
{
$ie4++;
}
if(ereg("MSIE(\_?)( ?)5",$row[0]) )
{
$ie5++;
}
if( (!ereg("3(\.)([0-9]+) (\[)([a-z]+)(\])(.*)$",$row[0]))
&&(!ereg("4(\.)([0-9]+) (\[)([a-z]+)(\])(.*)$",$row[0]))
&&(!ereg("MSIE(\_?)( ?)3",$row[0]) )
&&(!ereg("MSIE(\_?)( ?)4",$row[0]) )
&&(!ereg("MSIE(\_?)( ?)5",$row[0]) ))
{
$autre++;
}
}
mysql_close();
function compare($navig,$nbre)
{
if($navig==$netscape3) { $navig++; }
if($nbre!=1)
{
if($navig==$netscape4) { $navig++; }
}
if($nbre>2)
36
Langage PHP
{
if($navig==$ie3) { $navig++; }
}
if($nbre>3)
{
if($navig==$ie4) { $navig++; }
}
if($nbre>4)
{
if($navig==$ie5) { $navig++; }
}
return($navig);
}
$netscape3=$netscape3*10;
$netscape4=$netscape4*10;
$ie3=$ie3*10;
$ie4=$ie4*10;
$ie5=$ie5*10;
$autre=$autre*10;
$netscape4=compare($netscape4,1);
$ie3=compare($ie3,2);
$ie4=compare($ie4,3);
$ie5=compare($ie5,4);
$autre=compare($autre,5);
function radians($degrees)
{
return($degrees * (pi()/180.0));
}
return(array($x,$y));
}
$ChartDiameter = 130;
$ChartFont = 2;
$ChartFontHeight = imagefontheight($ChartFont);
$ChartFontWidth = imagefontwidth($ChartFont);
$ChartData = array($netscape3,$netscape4,$ie3,$ie4,$ie5,$autre);
$ChartData2 = array($netscape3=>"Netscape 3",
$netscape4=>"Netscape 4",
$ie3=>"Internet Exploreur 3",
$ie4=>"Internet Exploreur 4",
$ie5=>"Internet Exploreur 5",
$autre=>"Autres Navigateurs");
rsort($ChartData);
arsort($ChartData2);
$colorBody = imagecolorallocate($image,0xEF,0xF2,0xFB);
37
Langage PHP
$colorBorder = imagecolorallocate($image,0x00,0x00,0x00);
$colorText = imagecolorallocate($image,0x00,0x00,0x00);
$colorSlice[]= imagecolorallocate($image,0x76,0x89,0xFF);
$colorSlice[]= imagecolorallocate($image,0x96,0xA6,0xFF);
$colorSlice[]= imagecolorallocate($image,0xA6,0xB9,0xFF);
$colorSlice[]= imagecolorallocate($image,0xB6,0xC9,0xFF);
$colorSlice[]= imagecolorallocate($image,0xC6,0xD9,0xFF);
$colorSlice[]= imagecolorallocate($image,0xD6,0xE9,0xFF);
imagefill($image,0,0,$colorBody);
$Degrees = 0;
for($index=0; $index < count($ChartData); $index++)
{
$ChartDataReel=(int)($ChartData[$index]/10);
if( $ChartDataReel !=0)
{
$StartDegrees = round($Degrees);
$Degrees+= (($ChartDataReel/$total)*360);
$EndDegrees = round($Degrees);
$CurrentColor = $colorSlice[$index%(count($colorSlice))];
imagefilltoborder($image, $LineX + 2,
$LineY + 2, $colorBorder, $CurrentColor);
$valeur=(int)($ChartData[$index]/10);
$valeur2=$ChartData[$index];
$pourcentage=round(($valeur/$total)*100);
imagestring($image, $ChartFont, $LineX + 5 + $ChartFontHeight,
$LineY, "$ChartData2[$valeur2]", $colorText);
imagestring($image, $ChartFont, $LineX + 5 + $ChartFontHeight+
23*$ChartFontWidth, $LineY, "$valeur", $colorText);
38
Langage PHP
imagestring($image, $ChartFont, $LineX + 5 + $ChartFontHeight+
31*$ChartFontWidth, $LineY, "$pourcentage %", $colorText);
}
imagegif($image);
?>
Cookies / En-têtes HTTP
Lors de chaque échange par le protocole HTTP entre votre navigateur et le serveur, des données dîtes d' en-têtes
contenant desinformations sur les données à envoyer (dans le cas d'une requête) ou envoyées (dans le cas d'une
réponse). Les informations en question, généralement sur une page web ou une image, suivent ces en-têtes. Les en-
têtes HTTP permettent aussi d'effectuer des actions sur le navigateur comme le transfert de cookies ou bien une
redirection vers une autre page.
Ces en-têtes sont les premières informations envoyées au navigateur (pour une réponse) ou au serveur (dans le cas
d'une requête), elles se présentent sous la forme:
en-tête : valeur
PHP fournit une fonction permettant d'envoyer très simplement des en-têtes HTTP manuellement du serveur au
navigateur (il s'agit alors d'une réponse HTTP. La syntaxe de cette fonction est la suivante:
Etant donnée que les en-têtes HTTP sont les premières informations envoyées, la fonction header() doit
être utilisée avant tout envoi de données HTML au navigateur (le script qui la contient doit donc être
placé avant la balise <HTML> et avant toute fonction echo(),print ou printf())
Tableau getallheaders();
Le tableau retourné par la fonction contient les en-têtes indexés par leur nom. Voici un script permettant par exemple
de récupérer des en-têtes particuliers.
<?
$entetes = getallheaders;
echo $entetes["location"];
?>
39
Langage PHP
PHP permet de gérer très facilement les cookies (pour plus d'informations sur les cookies, veuillez vous reporter à cet
article), c'est-à-dire la création de petits fichiers texte chez le client permettant de mémoriser individuellement des
préférences pour chaque utilisateur sans le gérer du côté du serveur.
Créer le cookie
Pour créer un cookie sur une machine appelant un de vos scripts PHP, il faut utiliser la fonction setcookie() dans celui-
ci. La fonction SetCookie() permet d'envoyer les informations relatives aux cookies dans les en-têtes HTTP
Voici la syntaxe de la fonction setcookie:
o Inversement Netscape Communicator 4.05 et Microsoft Internet Explorer 3.x ne traitent pas
correctement les cookies qui n'ont pas les paramètres chemin et expiration définis.
<?php
setcookie(
"Visites",
"Oui",
time()+2592000,
"/",
".commentcamarche.net",0);
?>
Quelques autres exemples:
40
Langage PHP
<?php
// Envoi d'un cookie qui disparaitra après la fermeture du navigateur
SetCookie("CcmUserSessionCookie","$login:$pass");
<?php
$Visites++;
setcookie(
"Visites",
$Visites,
time()+2592000,
"/",
".commentcamarche.net",0);
?>
A chaque appel de la page, le script récupère la valeur du cookie nommé Visites, l'incrémente, puis envoie le cookie
dont la valeur a été incrémentée.
Supprimer un cookie
Il peut éventuellement être utile de proposer à l'utilisateur de supprimer certains de ses cookies, ou bien de le faire
vous même de façon transparente.
Pour ceci il suffit de renvoyer le cookie grâce à la fonction setcookie() en spécifiant simplement l'argument
NomDuCookie:
<?php
setcookie("Visites");
?>
Une autre méthode consiste à envoyer un cookie dont la date d'expiration est passée:
<?php
setcookie("Visites","",0,"/","",0);
?>
Mail et réseau
PHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de
communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet
étant la messagerie électronique, il est naturel que PHP permette d'envoyer des mails.
41
Langage PHP
La fonction mail()
En PHP3 il existe une fonction très simple qui permet d'envoyer un email. Voilà sa syntaxe
<html?>
<body?>
<h4>Merci <?echo $nom;??></h4?>
<?
echo "<p>Votre commentaire : $texte</p?>";
mail(
"[email protected]",
"Commentaire sur CCM",
"$nom a laissé un commentaire à propos de commentcamarche.net: \n\n$texte"
);
?>
</body?>
</html?>
Les \n à l'intérieur du corps de m'email permettent d'aller à la ligne
Chez certains hébergeurs (dont Free) la fonction mail est désactivée car elle permet de simuler un envoi
de mail à partir de n'importe quelle adresse. Ainsi elle est parfois remplacée par la fonction email()
$from_email = "[email protected]";
$entetedate = date("D, j M Y H:i:s -0600"); // Offset horaire
$entetemail = "From: $from_email \n"; // Adresse expéditeur
$entetemail .= "Cc: \n";
$entetemail .= "Bcc: \n"; // Copies cachées
$entetemail .= "Reply-To: $from_email \n"; // Adresse de retour
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$entetemail .= "Date: $entetedate";
La commande précédente équivaut donc à :
mail(
"[email protected]",
"Commentaire sur commentcamarche.net",
"$nom a laissé un commentaire à propos de commentcamarche.net: \n\n$texte",
$entetemail
);
La fonction email()
La fonction email() remplace parfois la fonction mail() chew certains hébergeurs (dont Free) car elle permet
uniquement d'envoyer des mails à partir de votre adresse email.
Elle s'utilise à peu près de façon similaire à la fonction mail() mais sa syntaxe est quelque peu différente:
email("webmaster",
42
Langage PHP
"[email protected]",
"Bonjour Toto",
"Salut Toto\nvoici ton message");
"{serveur:port}INBOX"
Le port utilisé par les serveurs IMAP est 143 par défaut.
Voici dans le cas de la newsletter de Comment ça Marche le script permettant d'ouvrir la boîte:
$mailbox = imap_open("{imap.pro.proxad.net:143}INBOX",
"[email protected]",
"password");
Une fois la boîte au lettre ouverte, il est possible (et généralement utile) de consulter les informations sur l'état de la
boîte aux lettres grâce à la fonction imap_check() dont la syntaxe est comme suit:
43
Langage PHP
Msgno
newsgroups
Recent
references
remail
return_pathaddress
sender
senderaddress
Size
subject
Subject
to
toaddress
update
Unseen
Les propriétés de l'objet retourné par la fonction imap_header() sont accessible par la notation suivante:
$Nom_de_l_objet->Propriétés;
La fonction imap_num_msg() permet de savoir très facilement le nombre de messages sur le serveur.
<?
$mailbox = imap_open("{imap.pro.proxad.net:143}INBOX",
"[email protected]",
"password");
$check = imap_check($mailbox);
$nMessages = imap_num_msg($mailbox);
echo "<table border=\"1\">
for($index=1; $index <= $nMessages; $index++){
echo "<tr><td>$header->Subject</td></tr>\n";
$from = $header->from[0];
echo "<tr><td>$from</td></tr>\n";
$corps = imap_body($mailbox,$index);
echo "<tr><td>$corps</td></tr>\n";
if (eregi(".*a detruire.*",$header->Subject)||
eregi("destruction",$corps)) {
imap_delete($mailbox,$index,0);
}
echo "</table>\n";
}
imap_expunge($mailbox);
imap_close($mailbox);
?>
Moteur de Recherche
Idée générale
44
Langage PHP
Le moteur de recherche suivant a été mis au point par moi-même et ne correspond donc qu'à une idée possible de
moteur de recherche simple, ne gérant qu'un seul mot clé.
Le concept du fonctionnement de ce moteur est de créer une base de donnée contenant les mots clés de chaque page
du site stockés dans des balises spéciales appelées méta tags. Un premier script permet donc de "scanner" l'ensemble
des répertoires (et sous-répertoires) d'un site à la recherche de fichiers dont l'extension est .htm ou .html, puis de
scruter leur contenu à la recherche des balises méta keywords (les mots-cés), title (le titre de la page), puis de
stocker ces données, ainsi que l'emplacement du fichier sur le serveur, dans une base de données. Chaque fichier du
site devant être indexer devra comporter les balises méta suivantes:
<head>
<META NAME="ROBOTS" content="all">
<META NAME="keywords" content="mot clé 1,mot cle 2,Mot clé 3, Mots clefs">
<META NAME="title" content="titre de votre page">
<title>titre de votre page</title>
</head>
La balises ROBOTS permet de spécifier si le fichier doit être indexé ou non. Si vous ne voulez pas qu'une page de
votre site soit indexée, il suffit alors de lui incorporer la balise méta suivante:
<head>
<META NAME="ROBOTS" content="none">
</head>
Les balises précédentes ont l'avantage d'être utilisées aussi par les principaux moteurs du marché
(Yahoo!,Altavista,Voilà,...)
Dans un second temps, un script PHP permet d'exploiter la base de données ainsi créée en cherchant dans celle-
ci le mot clé saisi par l'utilisateur par l'intermédiaire d'un formulaire.
Il suffit donc de créer un petit script PHP dont le seul but sera de créer cette table, que l'on appelera search
<html>
<head>
<title>Creation de la table</title>
</head>
<body>
<?php
$host = "Votre serveur de base de données";
$user = "Votre nom d'utilisateur";
$password = "Votre mot de passe";
$bdd = "Votre base de données sur le serveur";
mysql_connect($host, $user, $password) or die ("Connexion au serveur impossible");
45
Langage PHP
<?php
if (!$password) {
echo "
<p>\n
<table bgcolor=#EFF2FB border=\"0\" cellspacing=\"0\" cellpadding=\"1\" width=100%>\n
<tr><td>\n
<a name=\"#auth\"><h2>Authentification!</h2></a>\n
</td></tr>\n
</table>\n
<p>\n
<tr>\n
<td>Nom d'utilisateur:</td><td><input type=text size=\"30\" name=\"user\"></td>\n
</tr>\n
<tr>\n
<td>Mot de passe:</td><td><input type=password size=\"20\" name=\"password\"></td>\n
</tr>\n
<tr>\n
<td colspan=\"2\"><input type=submit value=\"Go!\"></td>\n
</tr>\n
</table>\n
</form>\n";
}
else{
echo "
<p>\n
<table bgcolor=#EFF2FB border=\"0\" cellspacing=\"0\" cellpadding=\"1\" width=100%>\n
<tr><td>\n
<a name=\"#index\"><h2>Indexation du site en cours</h2></a>\n
</td></tr>\n
</table>\n
<p>\n";
46
Langage PHP
function ScanDir($Directory,$Courant){
$MyDirectory = opendir($Directory);
while($Entry = readdir($MyDirectory)) {
$MetaTags = get_meta_tags($Directory."/".$Entry);
if ($MetaTags["robots"] == "all") {
$MetaKey = $MetaTags["keywords"];
$MetaKey = strtoupper($MetaKey);
echo "Meta($Directory/$Entry): $MetaKey
\n";
$MetaTitre = $MetaTags["title"];
echo "Meta($Directory/$Entry): $MetaTitre
\n";
}
}
}
closedir($MyDirectory);
}
$open_basedir=".";
ScanDir(".","");
mysql_close();
?>
47
Langage PHP
<input type="text" name="Mot" size="15">
<input type="button" value="Rechercher" alt="Lancer la recherche!">
</form>
Voici le résultat de ce code HTML:
Entrez un mot clé:
Puis il s'agit de créer le script PHP (le dernier) recherchant l'ensemble des enregistrements de la base de données
contenant la chaîne entrée par l'utilisateur. Ce script est simple, il effectue dans un premier temps une requête SQL
sélectionnant les enregistrements contenant la chaîne. Puis il affiche le nombre d'enregistrements retournés, et une
boucle while exploite ces enregistrements et les affiche les uns à la suite des autres.
<?php
$host = "Votre serveur de base de données";
$user = "Votre nom d'utilisateur";
$password = "Votre mot de passe";
$bdd = "Votre base de données sur le serveur";
mysql_connect($host, $user, $password) or die ("Connexion au serveur impossible");
echo "
<html>
<head>
<title>Résultat de la recherche</title>
</head>
<body>";
else {
// On selectionne les enregistrements contenant le mot clé dans les keywords ou le titre
$query = "SELECT distinct count(lien) FROM search
WHERE keyword LIKE \"%$Mot%\"
OR titre LIKE \"%$Mot%\"
";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$Nombre = $row[0];
$result = mysql_query($query);
48
Langage PHP
while($row = mysql_fetch_row($result))
{
echo "
<p>\n
<b>$row[2]</b>\n
<br><a href=\"../$row[0]\">Visualiser l'article</a>\n
<p>\n
";
}
}
}
// on ferme la base
mysql_close();
?>
</body>
</html>
Remarques
Le moteur présenté ci-dessus permet de faire une recherche basique, il est donc possible de lui ajouter des
fonctionnalités, permettant par exemple de faire une recherche à partir de plusieurs mots-clés (comme les moteurs de
recherche courants). D'autre part, les résultats sont affichées de manière basique les uns à la suite des autres. Il vous
revient d'adapter la présentation des résultats à votre site, ainsi que celle du formulaire ou des messages
d'avertissement...
49