PHP (Hypertext PreProcessor).
Initiation au langage PHP Page 2 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
SOMMAIRE
AVERTISEMENT ............................................................................................................................. 4	
  
I.	
   PRESENTATION ................................................................................................................. 5	
  
1.1.	
   Origines ............................................................................................................................ 5	
  
1.2.	
   principaux atouts.......................................................................................................... 5	
  
1.3.	
   SGBD supportés par PHP........................................................................................... 6	
  
II.	
   IMPLEMENTATION DU CODE........................................................................................ 7	
  
2.1.	
   L'interprétation du code par le serveur ............................................................... 7	
  
2.2.	
   Implantation au sein du code HTML...................................................................... 7	
  
2.3.	
   Les commentaires ........................................................................................................ 8	
  
2.4.	
   Typologie.......................................................................................................................... 8	
  
III.	
   INSTALLATION SOUS WINDOWS............................................................................... 9	
  
3.1.	
   Introduction à WampServer..................................................................................... 9	
  
3.2.	
   Installation ...................................................................................................................... 9	
  
3.3.	
   Editer votre site........................................................................................................... 11	
  
3.4.	
   Autres outils.................................................................................................................. 11	
  
IV.	
   CONCEPT DE VARIABLES AVEC PHP....................................................................... 12	
  
4.1.	
   Declaration et type .................................................................................................... 12	
  
4.2.	
   Nommage des variables........................................................................................... 12	
  
4.3.	
   Variables scalaires...................................................................................................... 12	
  
4.4.	
   Variables tableaux...................................................................................................... 13	
  
4.5.	
   Tests sur les variables.............................................................................................. 16	
  
4.6.	
   Définition de constantes .......................................................................................... 16	
  
V.	
   LES OPERATEURS........................................................................................................... 17	
  
5.1.	
   Les opérateurs arithmétiques .............................................................................. 17	
  
5.2.	
   Les opérateurs d'assignation ................................................................................. 17	
  
5.3.	
   Les opérateurs d'incrémentation / Décrémentation ..................................... 18	
  
5.4.	
   Les opérateurs de comparaison............................................................................ 19	
  
5.5.	
   Les opérateurs logiques (booléens) .................................................................... 19	
  
5.6.	
   (Les opérateurs bit-à-bit)........................................................................................ 20	
  
5.7.	
   (Les opérateurs de rotation de bit) ..................................................................... 20	
  
5.8.	
   Autres opérateurs....................................................................................................... 21	
  
5.9.	
   Les priorités .................................................................................................................. 21	
  
VI.	
   STRUCTURES CONDITIONNELLES........................................................................... 23	
  
6.1.	
   La notion de bloc ........................................................................................................ 23	
  
6.2.	
   Les primitives de choix............................................................................................. 23	
  
6.3.	
   L'instruction if ... elseif ... else.............................................................................. 24	
  
6.4.	
   Les boucles.................................................................................................................... 26	
  
VII.	
   LA NOTION DE FONCTION.......................................................................................... 30	
  
7.1.	
   La déclaration d'une fonction................................................................................. 30	
  
7.2.	
   Appel de fonction........................................................................................................ 30	
  
7.3.	
   Portée (visibilité) des variables............................................................................. 32	
  
7.4.	
   Retourner plusieurs variables................................................................................ 35	
  
7.5.	
   La récursivité................................................................................................................ 35	
  
7.6.	
   Les fonctions standards d’affichage................................................................... 36	
  
VIII.	
   FONCTION MAIL.............................................................................................................. 39	
  
8.1.	
   La fonction mail() ....................................................................................................... 39	
  
8.2.	
   Les options / en-têtes............................................................................................... 39	
  
Initiation au langage PHP Page 3 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
8.3.	
   La fonction email()..................................................................................................... 40	
  
IX.	
   NOTION DE VARIABLES D'ENVIRONNEMENT .................................................... 41	
  
9.1.	
   Les variables d'environnement ............................................................................. 41	
  
9.2.	
   Affichage des variables d'environnement ......................................................... 42	
  
X.	
   LA GESTION DES FICHIERS AVEC PHP.................................................................. 44	
  
10.1.	
   La fonction fopen() .................................................................................................... 44	
  
10.2.	
   Lecture et écriture...................................................................................................... 45	
  
10.3.	
   Les tests de fichiers................................................................................................... 46	
  
10.4.	
   Quelques fonctions de manipulation de fichiers............................................. 47	
  
XI.	
   LES EXPRESSIONS REGULIERES.............................................................................. 49	
  
11.1.	
   Construire une expression régulière................................................................... 49	
  
11.2.	
   Les classes de caractères........................................................................................ 51	
  
11.3.	
   Les fonctions de manipulation d'expressions régulières............................. 51	
  
XII.	
   CREATION D’IMAGES.................................................................................................... 54	
  
12.1.	
   Prérequis........................................................................................................................ 54	
  
12.2.	
   Comment utiliser ces fonctions............................................................................. 54	
  
12.3.	
   L'allocation de couleur.............................................................................................. 55	
  
12.4.	
   La création de formes............................................................................................... 55	
  
12.5.	
   Les chaînes de caractères ....................................................................................... 56	
  
12.6.	
   Un diagramme de visiteurs..................................................................................... 58	
  
XIII.	
   LES SESSIONS ET LES COOKIES ............................................................................. 61	
  
13.1.	
   Les sessions.................................................................................................................. 61	
  
13.2.	
   Les cookies.................................................................................................................... 63	
  
XIV.	
   NOTION DE CLASSES ................................................................................................... 66	
  
14.1.	
   introduction................................................................................................................... 66	
  
14.2.	
   sousclasse...................................................................................................................... 66	
  
14.3.	
   Quelques fonctions : ................................................................................................. 66	
  
14.4.	
   remarque ....................................................................................................................... 67	
  
XV.	
   INTRODUCTION AUX BASES DE DONNEES (MYSQL)....................................... 68	
  
15.1.	
   Introduction .................................................................................................................. 68	
  
15.2.	
   Connexion à une base de données...................................................................... 68	
  
15.3.	
   manipulation................................................................................................................. 69	
  
15.4.	
   Quelques fonctions supplémentaires très utiles............................................. 70	
  
XVI.	
   MINI PROJET..................................................................................................................... 71	
  
Initiation au langage PHP Page 4 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
AVERTISEMENT
Cet ouvrage s’adresse aux étudiants des filières informatiques et à tous ceux qui sont passionnés
de la programmation informatique en generale et en particulier du developpement web
dynamique.
Pour toutes vos remarques et suggestion contactez
nabeledi@yahoo.fr
Initiation au langage PHP Page 5 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
I.PRESENTATION
1.1. Origines
C’est un langage incrusté au HTML et interprété côté serveur (comme les scripts CGI, ASP, ...) et
non du côté client (comme un script écrit en Javascript ou une applet Java ...).
Il dérive du C et du Perl dont il reprend la syntaxe. Il est extensible grâce à de nombreux modules
et son code source est ouvert. Comme il supporte tous les standards du web et qu’il est gratuit, il
s’est rapidement répandu sur la toile.
Le langage PHP a été créé 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 donné 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 Gutmans rejoignirent 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.
Le nouveau moteur, appelé 'Zend Engine' (combinaison des noms de Zeev et Andi), atteint
ces objectifs avec succès, et la première version fut publiée vers la mi-1999. PHP 4.0, s'appuyant
sur ce moteur et amélioré par un grand nombre de nouvelles fonctionnalités fut publié
officiellement en mai 2000, presque 2 ans après son prédécesseur. En plus de performances
nettement plus élevées, PHP 4.0 apportait le support de nombreux serveurs web, les sessions
HTTP, la bufferisation de sortie, une sécurité accrue des informations visiteurs et plusieurs
nouvelles structures de langage.
Hypertext Preprocessor (acronyme récursif à l’exemple du système Open Source Linux : Is Not
UniX) est la signification officielle de PHP.
En juillet 2000 plus de 300.000 sites tournaient sous PHP !
PHP 5 est sorti en Juillet 2004 après un long développement et plusieurs pré-versions. Il est régi
par son moteur, le Zend Engine 2.0 avec un nouveau modèle et des dizaines de nouvelles
fonctionnalités.
30 juin 2009 , PHP 5.3 est enfin disponible en version finale . La dernière mise à jour est la 5.3.2
datant du 4 mars 2010
La nouvelle monture de la plateforme star du Web est en cours de préparation : PHP 6 avec
l’amélioration de la Programmation Orienté Objet, l’amélioration et sécurisation des fonctionnalités,
1.2. principaux atouts
La gratuité et la disponibilité du code source (PHP 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)
Initiation au langage PHP Page 6 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
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 disponible sur les plateformes Linux, et
Windows).
L'intégration au sein de nombreux serveurs web (Apache, Microsoft IIS, ...)
1.3. SGBD supportés par PHP
PHP permet un interfaçage simple avec de nombreux SGBD.
PHP supporte les SGBD suivants (la liste est évolutive):
Adabas D
DBase
Empress
FilePro
Informix
Interbase
MSQL
MySQL
Oracle
PostgreSQL
Solid
Sybase
Velocis
Unix dbm
Hyperwave
IBM DB2
Ingres
FrontBase
Ovrimos
FilePro (lecture seule)
Il existe aussi des couches d'abstraction de base de données comme DBX qui vous permettent de
vous connecter de manière transparente à toute base de données supportée par cette extension.
De plus, PHP supporte ODBC, ce qui vous permet de vous connecter à toute autre base de
données qui supporte ce standard.
PHP supporte de nombreux protocoles comme par exemple LDAP, IMAP, SNMP, NNTP, POP3,
HTTP, COM (sous Windows) et encore d'autres. Vous pouvez ouvrir des sockets réseau, et
intéragir avec n'importe quel autre protocole. PHP supporte le format complexe WDDX, qui permet
de communiquer entre tous les langages web. En terme d'interconnexion, PHP supporte aussi les
instanciations d'objets Java, et les utilise de manière transparente comme objets intégrés. Vous
pouvez aussi exploiter les objets distants avec CORBA.
PHP dispose de fonctionnalités extrêmement utiles pour le traitement de texte, allant des
expressions régulières POSIX étendues ou Perl aux traitements des fichiers XML, avec les
standards SAX et DOM. Vous pouvez utiliser les transformations XSLT.
En commerce électronique, vous trouverez des outils de paiement intégrés comme Cybercash,
CyberMut, VeriSign Payflow Pro et CCVS, pour réaliser des paiements en ligne.
Initiation au langage PHP Page 7 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
II.IMPLEMENTATION DU CODE
2.1. L'interprétation du code par le serveur
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 ".php" ou".php3" ou ".php4" ou
".php5" pour être interprété par le serveur!
Ainsi, lorsqu'un navigateur (le client) désire accéder à une page dynamique réalisé en php:
le serveur reconnaît qu'il s'agit d'un fichier php
il lit le fichier php
Dès que le serveur rencontre une balise indiquant que les lignes suivantes sont du code php, il
"passe" en mode php, 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 au serveur
A la fin du script, le serveur transmet le résultat au client (le navigateur)
Le code php stocké sur le serveur n'est donc jamais visible directement par le client puisque dès
qu'il en demande l'accès, le serveur l'interprète!
De cette façon aucune modification n'est à apporter sur les navigateurs...
2.2. Implantation au sein du code HTML
Pour que le script soit interprété par le serveur deux conditions sont nécessaires:
Le fichier contenant le code doit avoir l'extension .php et non .htm
Le code php contenu dans le code HTML doit être délimité par les balises
<?php et ?> ou <? et ?> ou <script language="php"> et </script>
Exemple
Voici l'exemple le plus utilisé de script php:
<?php
echo "bonjour monde"; // affiche bonjour monde
?>
On notera bien évidemment que la fonction echo permet d'afficher sur le navigateur la chaîne
délimitée par les guillemets...
Le séparateur d'instructions est le point virgule ; . Il est obligatoire, sauf si l'instruction est
suivie de la balise ?>
Initiation au langage PHP Page 8 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
2.3. 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 ou 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 code.
Commentaire sur une ligne: // ou #
Commentaire sur plusieurs lignes: /* ... */
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
Les commentaires ne peuvent pas couper un mot du code en deux
2.4. Typologie
La manière d'écrire les choses en langage PHP a son importance. Le langage PHP est 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().
Initiation au langage PHP Page 9 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
III.INSTALLATION SOUS WINDOWS
3.1. Introduction à WampServer
Afin de faire fonctionner PHP, il est nécessaire à la base d'en télécharger les sources depuis un site
spécialisé (par exemple PHP.net), puis de les compiler (ainsi que d'éditer les liens) afin de créer
un fichier exécutable.
Ce processus demande des notions avancées en informatique, c'est pourquoi un adepte de PHP
(Romain Bourdon) a mis au point un package WampServer contenant 3 produits
incontournables de la scène PHP :
Le serveur Web Apache
Le moteur de scripts PHP4
La base de données MySQL
WampServer est ainsi un pack fonctionnant sous Windows permettant d'installer en un clin d'oeil
les éléments nécessaires au fonctionnement d'un site web dynamique développé en PHP
Le pack WampServer est disponible sur http://www.wampserver.com
Il vous suffit dans un premier temps de télécharger et installer la version la plus récente (à ce
jour WampServer 2.0i)
3.2. Installation
Double cliquez sur le fichier téléchargé et laissez vous guider.
Tout est géré par l'installeur de WampServer. Par défaut, WampServer est livré avec les toutes
dernières versions de Apache, MySQL et PHP.
Si tout va bien, vous devriez voir apparaître un petit symbole en bas à droite de votre barre des
tâches, un symbole blanc ( il est tout à gauche) :
Si ce symbole a un fond blanc comme ici, c'est parfait. Si le fond est jaune ou rouge, cela signifie
que les services ne se sont pas installés correctement, ou qu'ils n'ont pu démarrer. Dans le doute,
relancez Wampserver après l'avoir quitté proprement (clic droit, exit).
Une fois Wampserver installé, vous allez pouvoir consulter sa page d'accueil par défaut (réalisée
en PHP).
Initiation au langage PHP Page 10 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Pour ce faire :
• Invoquez localhost du menu contextuel de wampserver
Ou bien
• Démarrez votre navigateur web, puis tapez dans la bare d'adresses ceci :
http://localhost/
OU
http://127.0.0.1/ .
(si un autre service web n’est pas activé sur le port 80 de la machine)
Initiation au langage PHP Page 11 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Les deux adresses ci-dessus représentant votre machine locale.
3.3. Editer votre site
Pour créer votre site web dynamique avec WampServer, il vous suffit de déposer vos créations
dans le sous-répertoire www/ de wamp/ depuis la racine du disque d’intallation.
Par exemple créez un fichier phpinfo.php texte contenant le texte suivant :
<?
phpinfo();
?>
Déposez-le dans le sous répertoire /www. Vous pouvez désormais visualiser le résultat à l'adresse
suivante: http://localhost/phpinfo.php ou http://127.0.0.1/phpinfo.php
3.4. Autres outils
Des packages peuvent remplacer WampServer et sont laissés à l’appréciation du lecteur.
EasyPhp
Inclu :
• Apache
• MySQL
• PHP
XAMPP
Uune "distribution" d'Apache qui contient également
• Apache
• MySQL
• PHP et PERL
LAMP
Sur Linux mais disponible aussi pour windows inclut
• Apache
• Mysql
• Php
Initiation au langage PHP Page 12 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
IV.CONCEPT DE VARIABLES AVEC PHP
4.1. Declaration et type
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.
Le typage des variables est implicite en php. Il n’est donc pas nécessaire de déclarer leur type au
préalable ni même de les initialiser avant leur utilisation.
Les identificateurs de variable sont précédés du symbole « $ » (dollars). Exemple : $nabson .
Les variables peuvent être de type :
• entier (integer),
• réel (double),
• chaîne de caractères (string),
• tableau (array),
• objet (object),
• booléen (boolean).
Il est possible de convertir une variable en un type primitif grâce au cast (comme en C).
Exemple :
$str = ’’12’’; // $str vaut la chaîne ‘’12’’
$nbr = (int)$str; // $nbr vaut le nombre 12
4.2. Nommage des variables
Avec PHP, les noms de variables doivent répondre à certains critères:
Un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou un "_" (pas par
un chiffre)
Un nom de variable peut comporter des lettres, des chiffres et le caractère _ (les espaces ne sont
pas autorisés!)
Nom de variable correct Nom de variable incorrectRaison
$Variable $Nom de Variable comporte des espaces
$Nom_De_Variable $123Nom_De_Variable commence par un chiffre
$nom_de_variable $toto@mailcity.com caractère spécial @
$nom_de_variable_123 $Nom-de-variable signe – interdit
$nom_de_variable nom_de_variable ne commence pas par $
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...
4.3. Variables scalaires
Le 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)
chaînes de caractères: ensembles de caractères entre guillemets simples ou doubles
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.
Initiation au langage PHP Page 13 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Instruction Type de la variable
$Variable = 0; type entier
$Variable = 12; type entier
$Variable = 0.0; type réel
$Variable = 12.0; type réel
$Variable = "0.0"; type chaîne
$Variable = "Bonjour tout le monde"; type chaîne
Il existe des caractères repérés par un code ASCII spécial permettant d'effectuer des opérations
particulières. Ces caractères peuvent être représentés plus simplement en langage PHP grâce au
caractère '' suivi d'une lettre, qui précise qu'il s'agit d'un caractère de contrôle:
Caractère Description
" Guillemet
 barre oblique inverse (antislash)
r retour chariot
n retour à la ligne
t Tabulation
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'ambiguïté...
4.4. Variables tableaux
4.4.1. Géneralités
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.
Pour créer un tableau, utiliser la fonction array( );
Exemple
Déclaration
$fruits = array();
Affectation
$fruits[0]= "pomme";
$fruits[1]= "banane";
$fruits[] = "orange"; // equivaut a $fruits[2]= "orange"
ou
$fruits= array( "pomme", "banane", "orange" );
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:
Initiation au langage PHP Page 14 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
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.
4.4.2. Tableaux multidimensionnels
Comme nous l'avons déjà vu dans sur les tableaux à une dimension (les vecteurs), nous savons
que nous pouvons mettre absolument tout ce que l'on veut dans chaque casier de notre tableau. Y
compris même un autre tableau. Hé bien c'est exactement comme ça qu'on déclare un tableau à
deux dimensions.
Si l'on ne sait pas à l'avance ce que l'on va mettre dans chaque casier, on déclare ce tableau de la
manière suivante :
$Tableau = array(array()) ;
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] = "ntic";
$Tableau[1][0] = 123.4567;
$Tableau[1][1] = "Au revoir";
4.4.3. Tableau associatif
Un tableau associatif est un tableau dont l'index est une chaine de caractère au lieu d'un nombre.
On parle aussi de ``hash array'' ou ``hash''. Cette façon de nommer les indices peut parfois être
plus agréable à utiliser.Le tableau associatif se déclare comme un tableau traditionnel
Exemple1
Déclaration
$personne = array();
Affectation
$personne["Nom"] = "Konan";
$personne["Prénom"] = "Jules";
$personne["Age"] = 31;
L’initialisation d’un tableau associatif est similaire à celle d’un tableau normal.
Exemple 2
$personne = array("Nom" => "Konan", "Prénom" => "Jules", "Age" => 31 );
Les exemples 1 et 2 sont equivalents
Ici à la clé "Nom" est associée la valeur "Konan".
4.4.4. Quelques fonctions relatives aux tableaux :
a) sizeof
Renvoie le nombre d'éléments d'un tableau. Équivalent de count
$sz= sizeof( $tablo );
b) is_array
Renvoie true si la variable est de type tableau (ou tableau associatif), false sinon.
Initiation au langage PHP Page 15 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
c) reset
reset($tablo)
Place le pointeur interne sur le premier élément du tableau: Chaque variable tableau possède un
pointeur interne repérant l'élément courant.
d) end
end($tablo)
Place le pointeur interne du tableau sur le dernier élément du tableau.
e) current
Renvoie l'élément courant du tableau.
f) next
Déplace le pointeur vers l'élément suivant, et renvoie cet élément. Renvoie false s’il n'existe pas .
g) prev
Déplace le pointeur vers l'élément précédent, et renvoie cet élément. Renvoie false s’il n'existe pas
Exemple
$transport = array('pied', 'velo', 'voiture', 'avion');
$mode = current($transport); // $mode = 'pied';
$mode = next($transport); // $mode = 'velo';
$mode = next($transport); // $mode = 'voiture';
$mode = prev($transport); // $mode = 'velo';
$mode = end($transport); // $mode = 'avion';
h) each
$a=each($tablo)
Renvoie l'index et la valeur courante dans un tableau à 2 éléments; $a[0] contient l'index, $a[1] la
valeur.
i) list
list( $scalar1, $scalr2, ... )
Construit un tableau temporaire à partir des variables scalaires passées en argument.
$tableau = array('le bon', 'la brute', 'le truand');
reset($tableau);
while ( list($clef, $valeur) = each($tableau) ) {
echo "$clef = $valeur <br />";
}
/*
0 = le bon
1 = la brute
2 = le truand
*/
j) key
key($tablo)
Renvoie l'index de l'élément courant du tableau.
Initiation au langage PHP Page 16 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
4.5. Tests sur les variables
La fonction isset permet de tester si une variable est définie.
La fonction unset permet de supprimer la variable, et de désallouer la mémoire utilisée.
$a= "php";
echo isset($a); // => 1 (vrai)
unset($a);
echo isset($a); // => 0 (faux)
La fonction gettype permet de connaître le type de la variable. Elle renvoie une chaîne : ``string''
ou ``integer'' ou ``double'' ou ``array'' ou ``object''. Note : Si la variable n'est pas définie, elle
renvoie "string"
$a= 12;
echo gettype($a) ; // => "integer"
$a= $a / 10;
echo gettype($a) ; // => "double"
On peut également tester un type particulier a l'aide des fonctions is_array, is_string,
is_int,is_float, is_object .
$a= 123;
echo is_int($a); // (vrai)
echo is_double($a); // (faux)
echo is_string($a) // (faux)
$a += 0.5;;
echo is_float($a); // (vrai)
Note: Les fonctions is_double et id_real sont équivalentes a is_float. Les fonctions is_long et
is_integer sont équivalentes a is_int.
4.6. 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:
define("Nom_de_la_variable", Valeur);
Exemple 1
define(‘’auteur’’,’’Nabeledi’’);
echo auteur; // affiche ‘Nabeledi’
Exemple 2
define(MY_YEAR,2010);
echo MY_YEAR; // affiche 2010
Contrairement aux variables, les identificateurs de constantes (et aussi ceux de fonction) ne sont
pas sensibles à la casse.
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 affectation n'est possible).
Initiation au langage PHP Page 17 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
V. LES OPERATEURS
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:
Les opérateurs arithmétiques
Les opérateurs d'assignation
Les opérateurs d'incrémentation
Les opérateurs de comparaison
Les opérateurs logiques
(Les opérateurs bit-à-bit)
(Les opérateurs de rotation de bit)
5.1. Les opérateurs arithmétiques
Les opérateurs de calcul permettent de modifier mathématiquement la valeur d'une variable
Opérateur Dénomination Effet Exple
Résultat
(pour x=7)
+ opérateur d'addition Ajoute deux valeurs $x+3 10
- opérateur de soustraction Soustrait deux valeurs $x-3 4
* opérateur de multiplication Multiplie deux valeurs $x*3 21
/ plus: opérateur de division Divise deux valeurs $x/3 2.3333333
% opérateur modulo
Donne le reste de la
division entière entre 2
nombres
$x%3 1
5.2. Les opérateurs d'assignation
L'opérateur d'assignation le plus simple est le signe "=". Le premier réflexe est de penser que ce
signe veut dire "égal à". Ce n'est pas le cas. Il signifie que l'opérande de gauche se voit affecter la
valeur de l'expression qui est à droite du signe égal.
La valeur d'une expression d'assignation est la valeur assignée. Par exemple, la valeur de
l'expression '$a = 3' est la valeur 3. Cela permet d'utiliser des astuces telles que :
Exemple
<?php
$b = 4 ;
$a = $b + 5;
// $b vaut 4 et $a est maintenant égal à 9
?>
En plus du simple opérateur d'assignation, il existe des "opérateurs combinés" pour tous les
opérateurs arithmétiques et pour les opérateurs sur les chaînes de caractères. Cela permet
d'utiliser la valeur d'une variable dans une expression et d'affecter le résultat de cette expression à
cette variable.
Exemple
Initiation au langage PHP Page 18 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
<?php
$a = 3;
$a += 5; // affecte la valeur 8 à la variable $a.
// correspond à l'instruction '$a = $a + 5');
$b = "Bonjour ";
$b .= " tout le monde!";
// affecte la valeur "Bonjour tout le monde!" à la
variable $b
// identique à $b = $b." tout le monde!";
?>
Ces opérateurs permettent de simplifier des opérations telles que ajouter une valeur dans une
variable et stocker le résultat dans la variable.
Opérateur Effet
= Affecte la valeur de droite à la variable de gauche
+= addition deux valeurs et stocke le résultat dans la variable (à gauche)
- = soustrait deux valeurs et stocke le résultat dans la variable
*= multiplie deux valeurs et stocke le résultat dans la variable
/= divise deux valeurs et stocke le résultat dans la variable
%= donne le reste de la division deux valeurs et stocke le résultat dans la variable
|= Effectue un OU logique entre deux valeurs et stocke le résultat dans la variable
^= Effectue un OU exclusif entre deux valeurs et stocke le résultat dans la variable
&= Effectue un Et logique entre deux valeurs et stocke le résultat dans la variable
.= Concatène deux chaînes et stocke le résultat dans la variable
5.3. Les opérateurs d'incrémentation / Décrémentation
Ce type d'opérateur permet de facilement augmenter ou diminuer d'une unité une variable. Ces
opérateurs sont très utiles pour des structures telles que des boucles, qui ont besoin d'un
compteur (variable qui augmente de un en un).
Un opérateur de type $x++ permet de remplacer des notations lourdes telles que $x=$x+1 ou
bien $x+=1
Exemple Nom Résultat
++$a Pré-incrémente Incrémente $a de 1, puis retourne $a.
$a++ Post-incrémente Retourne $a, puis l'incrémente de 1.
--$a Pré-décrémente Décrémente $a de 1, puis retourne $a.
$a-- Post-décrémente Retourne $a, puis décrémente $a de 1.
Exemple
<?php
//Post-incrémentation
$a = 5;
echo $a++ . "<br>n"; // la valeur de a est :5
echo $a . "<br>n"; // la valeur de a est :6
//Pré-incrémentation
$a = 5;
echo ++$a . "<br>n"; // la valeur de a est :6
Initiation au langage PHP Page 19 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
echo $a . "<br>n"; // la valeur de a est :6
//Post-décrémentation
$a = 5;
echo $a-- . "<br>n"; // la valeur de a est :5
echo $a . "<br>n"; // la valeur de a est :4
//Pré-décrémentation
$a = 5;
echo --$a. "<br>n" ; // la valeur de a est :4
echo $a . "<br>n"; // la valeur de a est :4
?>
5.4. Les opérateurs de comparaison
Ce type d’poperateur permet de faire ds comparaiasons
Exemple Nom Résultat
$a == $b Egal Vrai si $a est égal à $b.
$a === $b Identique
Vrai si $a est égal à $b et qu'ils sont de même type (PHP
4 seulement).
$a != $b Différent Vrai si $a est différent de $b.
$a <> $b Différent Vrai si $a est différent de $b.
$a < $b Plus petit que Vrai si $a est plus petit strictement que $b.
$a > $b Plus grand Vrai si $a est plus grand strictement que $b.
$a <= $b Inférieur ou égal Vrai si $a est plus petit ou égal à $b.
$a >= $b Supérieur ou égal Vrai si $a est plus grand ou égal à $b.
Un autre opérateur conditionnel est l'opérateur ternaire (":?"), qui fonctionne comme en langage
C.
Exemple
<?php
// Exemple d'utilisation pour l'opérateur ternaire
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// L'expression ci-dessus est identique à
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
L'expression (expr1) ? (expr2) : (expr3) renvoie la valeur de l'expression expr2 si
l'expression expr1 est vraie, et l'expression expr3 si l'expression expr1 est fausse.
5.5. Les opérateurs logiques (booléens)
Ce type d'opérateur permet de vérifier si plusieurs conditions sont vraies:
Exemple Nom Portée Résultat
$a and $b ET (And) ET logique Vrai si $a ET $b sont vrais.
$a or $b OU (Or) OU logique Vrai si $a OU $b est vrai
Initiation au langage PHP Page 20 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
$a xor $b XOR (Xor) OU exclusif Vrai si $a OU $b est vrai, mais pas les deux en même
temps.
! $a NON (Not) NON logique Vrai si $a est faux.
$a && $b ET (And) ET logique Vrai si $a ET $b sont vrais.
$a || $b OU (Or) OU logique Vrai si $a OU $b est vrai.
5.6. (Les opérateurs bit-à-bit)
Si vous ne comprenez pas ces opérateurs cela n'est pas important, vous n'en aurez probablement
pas besoin.
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.
Opérateur Nom Effet Syntaxe Résultat
& ET bit-à-bit Retourne 1 si les deux bits de même
poids sont à 1
9 & 12 (1001
& 1100)
8 (1000)
| OU exclusif Retourne 1 si l'un ou l'autre des deux
bits de même poids est à 1 (ou les
deux)
9 | 12 (1001 |
1100)
13 (1101)
^ OU bit-à-bit Retourne 1 si l'un des deux bits de
même poids est à 1 (mais pas les
deux)
9 ^ 12 (1001
^ 1100)
5 (0101)
~ Complément
(NON)
Retourne 1 si le bit est à 0 (et
inversement)
~9 (~1001) 6 (0110)
Exemple
<?php
echo 12 ^ 9; // Affiche '5'
?>
5.7. (Les opérateurs de rotation de bit)
Si vous ne comprenez pas ces opérateurs cela n'est pas important, vous n'en aurez probablement
pas l'utilité
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 rotations 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.
Initiation au langage PHP Page 21 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Opérateur Nom Effet Syntaxe Résultat
<< Rotation à gauche
Décale les bits vers la gauche (multiplie
par 2 à chaque décalage). Les zéros qui
sortent à gauche sont perdus, tandis que
des zéros sont insérés à droite
6 << 1 (110
<< 1)
12 (1100)
>>
Rotation à droite
avec conservation
du signe
Décale les bits vers la droite (divise par 2
à chaque décalage). Les zéros qui sortent
à droite sont perdus, tandis que le bit
non-nul de poids plus fort est recopié à
gauche
6 >> 1
(0110 >> 1)
3 (0011)
5.8. Autres opérateurs
Les opérateurs ne peuvent pas être classés dans une catégorie spécifique mais ils ont tout de
même chacun leur importance!
Opérateur Nom Effet Syntaxe Résultat
. Concaténation Joint deux chaînes bout à
bout
"Bonjour"."Au
revoir"
"BonjourAu
revoir"
$ Référencement de
variable
Permet de définir une variable $MaVariable = 2;
à Propriété d'un objet Permet d'accéder aux données
membres d'une classe
$MonObjetàPropr
iete
5.9. Les priorités
Lorsque l'on associe plusieurs opérateurs, il faut que l'interprêteur PHP sache dans quel ordre les
traiter.
La priorité des opérateurs spécifie l'ordre dans lequel les valeurs doivent être analysées. Par
exemple, dans l'expression 1 + 5 * 3, le résultat est 16 et non 18, car la multiplication ("*") a une
priorité supérieure par rapport à l'addition ("+").
Le tableau suivant dresse une liste de la priorité des différents opérateurs dans un ordre croissant
de priorité.
Précédence des opérateurs
Associativité Opérateurs
Gauche ,
Gauche or
Gauche xor
Gauche and
Droite print
Droite = += -= *= /= .= %= &= |= ^= <<= >>=
Gauche ? :
Gauche ||
Gauche &&
Gauche |
Gauche ^
Gauche &
Non-associatif == != === !==
Initiation au langage PHP Page 22 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Non-associatif < <= > >=
Gauche << >>
Gauche + - .
gauche * / %
droite ! ~ ++ -- (int) (float) (string) (array) (object) @
droite [
Non-associatif new
Bien que ! soit prioritaire sur =, PHP va tout de même exécuter des expressions comme : if
(!$a = ntic()). Dans cette situation, le résultat de ntic() sera placé dans la variable $a.
Initiation au langage PHP Page 23 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
VI. STRUCTURES CONDITIONNELLES
On appelle structure conditionnelle 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, parle alors de structures de boucle
6.1. 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...
6.2. Les primitives de choix
6.2.1. 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 une condition est
réalisée.
La syntaxe de cette expression est la suivante:
if (condition réalisée) {
liste d'instructions
}
6.2.2. L'instruction if ... else
L'instruction if dans sa forme basique ne permet de tester qu'une condition, or la plupart du temps
on aimerait pouvoir choisir les instructions à exécuter en cas de non réalisation de la condition...
L'expression if ... else permet d'exécuter une autre série d'instruction en cas de non-réalisation de
la condition.
La syntaxe de cette expression est la suivante:
if (condition réalisée)
{
liste d'instructions
}
La condition doit être entre des parenthèses
Il est possible de définir plusieurs conditions à remplir avec les opérateurs ET et OU (&& et ||)
par exemple l'instruction suivante teste si les deux conditions sont vraies :
if ((condition1)&&(condition2))
L'instruction ci-dessous exécutera les instructions si l'une ou l'autre des deux conditions est vraie :
if ((condition1)||(condition2))
S’il n'y a qu'une instruction, les accolades ne sont pas nécessaires...
Initiation au langage PHP Page 24 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
else
{
autre série d'instructions
}
6.3. L'instruction if ... elseif ... else
L'instruction if ... else ne permet de tester qu'une condition, or il est parfois nécessaire de tester
plusieurs conditions de façon exclusive, c'est-à-dire que sur toutes les conditions une seule sera
réalisée ...
L'expression if ... elseif ... else permet d'enchaîner une série d'instructions et évite d'avoir à
imbriquer des instructions if.
La syntaxe de cette expression est la suivante:
if (condition réalisée) {
liste d'instructions
}
elseif (autre condition réalisée)
{
autre série d'instructions
}
...
else (dernière condition réalisée)
{
série d'instructions
}
Exemple
<?php
if ($a > $b) {
print "a est plus grand que b";
}
elseif ($a == $b)
{
print "a est égal à b";
}
else
{
print "a est plus petit que b";
}
?>
Une façon plus courte de faire un test (opérateur ternaire)
Il est possible de faire un test avec une structure beaucoup moins lourde grâce à la structure
suivante, appelée opérateur ternaire:
(condition) ? instruction si vrai : instruction si faux
La condition doit être entre des parenthèses
Lorsque la condition est vraie, l'instruction de gauche est exécutée
Lorsque la condition est fausse, l'instruction de droite est exécutée
6.3.1. L'instruction switch
Initiation au langage PHP Page 25 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
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 Valeur2:
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'instructions qui suit celui-ci est exécutée. 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.
Exemple 1
Cet exemple donne deux manières différentes d'écrire la même chose, l'une en utilisant une séries
de if, et l'autre en utilisant l'instruction switch:
<?php
if ($i == 0) {
print "i égale 0";
}
if ($i == 1) {
print "i égale 1";
}
if ($i == 2) {
print "i égale 2";
}
switch ($i) {
case 0:
print "i égale 0";
break;
case 1:
print "i égale 1";
break;
case 2:
print "i égale 2";
break;
}
?>
Initiation au langage PHP Page 26 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Exemple 2
<?php
switch ($i) {
case 0:
print "i égale 0";
break;
case 1:
print "i égale 1";
break;
case 2:
print "i égale 2";
break;
default:
print "i n'est ni égal à 2, ni à 1, ni à 0.";
}
?>
N'oubliez pas d'insérer des instructions break après chaque test, ce genre d'oubli est difficile à
détecter car aucune erreur n'est signalée...
6.4. 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.
6.4.1. 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
}
Exemple:
for ($i=1; $i<6; $i++)
{
echo "$i<br>";
/* Cette boucle affiche 5 fois la valeur de $i, c'est-à-dire
1
Initiation au langage PHP Page 27 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
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 PHP autorise la déclaration de la variable de boucle dans l'instruction for
elle-même!
for( [initialisations] ; [test sortie] ; [faire a chaque fois] )
il faudra toujours vérifier que la boucle a bien une condition de sortie (i.e le compteur
s'incrémente correctement)
une instruction echo 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:
for($i=0;$i<10;$i++) exécute 10 fois la boucle ($i de 0 à 9)
for($i=0;$i<=10;$i++) exécute 11 fois la boucle ($i de 0 à 10)
for($i=1;$i<10;$i++) exécute 9 fois la boucle ($i de 1 à 9)
for($i=1;$i<=10;$i++) exécute 10 fois la boucle ($i de 1 à 10)
6.4.2. 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
}
Exemple
$i = 1;
while ($i <= 10)
{
print $i++; /* La valeur affiche est $i avant l'incrémentation
(post-incrémentation) */
}
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!
6.4.3. Saut inconditionnel
Il peut être nécessaire de faire sauter à la boucle une ou plusieurs valeurs sans pour autant mettre
fin à celle-ci.
Initiation au langage PHP Page 28 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
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)
{
echo "Division par zéro!";
continue;
}
$a = 1/($x-7);
echo "$a<br>";
$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)
{
echo "division par 0 <br>";
$x++;
continue;
}
$a = 1/($x-7);
echo "$a<br>";
$x++;
}
6.4.4. Arrêt inconditionnel
A l'inverse, il peut être voulu d'arrêter prématurément la boucle, pour une autre condition 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)
{
echo "division par 0";
break;
Initiation au langage PHP Page 29 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
}
echo "1/$a<br>";
}
6.4.5. Arrêt d'exécution du script
PHP autorise l'utilisation de la commande exit ou la fonction exit(), qui permet d'interrompre
totalement l'interprétation du script, ce qui signifie que le serveur n'envoie plus d'informations au
navigateur: le script est figé dans son état actuel. Cette instruction est particulièrement utile lors
de l'apparition d'erreur!
Initiation au langage PHP Page 30 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
VII.LA NOTION DE FONCTION
On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par
simple appel 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...).
Il n'y a pas de distinction fonctions / procédures en PHP
7.1. La déclaration d'une fonction
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:
function Nom_De_La_Fonction(argument1, argument2, ...)
{
liste d'instructions
}
Le nom de la fonction suit les mêmes règles que les noms de variables:
Le nom doit commencer par une lettre un nom de fonction peut comporter des lettres, des chiffres
et les caractères _ et & (les espaces ne sont pas autorisés!)
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
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!
7.2. 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();
Le point virgule signifie la fin d'une instruction et permet à l'interpréteur de distinguer les
différents blocs d'instructions
Initiation au langage PHP Page 31 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
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);
7.2.1. Renvoi d'une valeur par une fonction
La fonction peut renvoyer une valeur (et donc se terminer) grâce au mot-clé return. Lorsque
l'instruction return est rencontrée, la fonction évalue la valeur qui la suit, puis la renvoie au
programme appelant (programme à partir duquel la fonction a été appelée).
Une fonction peut contenir plusieurs instructions return, ce sera toutefois la première instruction
return rencontrée qui provoquera la fin de la fonction et le renvoi de la valeur qui la suit.
La syntaxe de l'instruction return est simple:
return valeur_ou_variable;
7.2.2. Les arguments d'une fonction
Il est possible de passer des arguments à une fonction, c'est-à-dire lui fournir une valeur ou le
nom d'une variable afin que la fonction puisse effectuer des opérations sur ces arguments ou bien
grâce à ces arguments.
Le passage d'arguments à une fonction se fait au moyen d'une liste d'arguments (séparés par des
virgules) entre parenthèses suivant immédiatement le nom de la fonction. Les arguments peuvent
être de simples variables, mais aussi des tableaux ou des objets. A noter qu'il est possible de
donner une valeur par défaut à ces arguments en faisant suivre le nom de la variable par le signe
"=" puis la valeur que l'on affecte par défaut à la variable.
Lorsque vous voulez utiliser un argument dans le corps de la fonction en tant que variable, celui-ci
doit être précédé par le signe $.
<?
function dire_texte($qui, $texte = 'Bonjour')
{
if(empty($qui)){ // $qui est vide, on retourne faux
return false;
}
Else
{
echo "$texte $qui"; // on affiche le texte
return true; // fonction exécutée avec succès
}
}
?>
Ainsi cette fonction peut être appelée de deux façons différentes:
<?
// Passage des deux paramètres
dire_texte("cher phpeur", "Bienvenue"); // affiche "Bienvenue cher
phpeur"
// Utilisation de la valeur par défaut du deuxième paramètre
dire_texte("cher phpeur"); // affiche "Bonjour cher phpeur"
?>
Initiation au langage PHP Page 32 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
7.3. Portée (visibilité) des variables
Voyons maintenant un caractère propre à beaucoup de langages de programmation fonctionnels:
la portée des variables.
En PHP, jusqu'à présent, lorsque vous déclariez une variable dans votre script, vous aviez
l'habitude d'accéder à cette variable dans tout le reste de votre page.
En effet, d'après le code suivant :
<?php
$toto = 5;
?>
$toto est une variable qui sera accessible par votre script PHP une fois sa déclaration faite, c'est-à-
dire juste après l'instruction $toto = 5.
Vous savez également, qu'une variable déclarée dans le corps d'une fonction n'est accessible que
dans le corps de cette même fonction.
Exemple :
<?php
$toto = 5;
function ma_fonction ()
{
echo $toto;
}
ma_fonction();
?>
Dans ce cas, l'exécution de ce code PHP n'affichera rien vu que $toto (contenu dans le code de la
fonction ma_fonction()) n'a strictement aucun rapport avec la variable $toto contenu dans le script
courant.
On appellera la variable $toto (celle contenue dans le code de la fonction) comme étant une
variable locale à la fonction ma_fonction() (elle n'est pas globale au script).
7.3.1. Le mot clé global
Sachez qu'il est possible d'utiliser dans le code même de vos fonctions des variables que vous avez
déclarées dans votre script courant à l'aide du mot clé global.
Reprenons notre exemple précédent :
<?php
$toto = 5;
function ma_fonction ()
{
global $toto;
echo $toto;
}
ma_fonction(); // Cet exemple affichera :5
?>
En effet, dans ce script, nous déclarons la variable (qui était jusque là locale) $toto comme étant
une variable globale du script.
PHP sait alors qu'il doit récupérer la valeur de cette variable dans le script courant.
Initiation au langage PHP Page 33 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Il n'y a aucune limite au nombre de variables globales qui peuvent être manipulées par une
fonction.
Vous pouvez également effectuer la même opération en utilisant le tableau associatif $_GLOBALS.
Le code suivant donnera le même résultat que le code précédent :
<?php
$toto = 5;
function ma_fonction ()
{
echo $_GLOBALS["toto"];
}
ma_fonction();
?>
7.3.2. Le mot clé static
Les amateurs de programmation par objets doivent bien connaître ce terme de static .
Une variable dite static est une variable locale à une fonction mais qui a la particularité de se
souvenir de sa valeur.
Prenons comme exemple le code suivant :
<?php
function ma_fonction ()
{
$toto = 1;
echo $toto;
$toto++;
}
for($i=1;$i<=50;$i++)
{
ma_fonction();
}
?>
Si je lance cette fonction 50 fois, vous allez tous penser que cette fonction affichera 50 fois la
valeur 1, et vous aurez raison :
Dans ce cas, l'incrémentation ne sert à rien puisque lorsque l'on a fini d'exécuter cette fonction
PHP "perd connaissance" de la valeur de la variable $toto.
En revanche, si on déclare la variable $toto comme étant une variable statique (grâce au mot clé
static), le comportement de cette fonction sera totalement différent.
En effet, vu que $toto est statique, PHP se souviendra de sa valeur lors de la dernière exécution
de la fonction.
Avec le code suivant :
<?php
function ma_fonction ()
{
static $toto = 1;
echo $toto;
$toto++;
}
for($i=1;$i<=50;$i++)
{
Initiation au langage PHP Page 34 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
ma_fonction();
}
?>
Si je lance 50 fois ma fonction, et bien nous verrons sur l'écran, la suite des nombres entre 1 et
50.
Explication : à chaque appel, PHP se souvient de la précédente valeur de la variable $toto (parce
qu'elle est static) et notre fonction incrémente alors cette valeur pour ensuite l'afficher.
7.3.3. Le passage par référence
Dans nos exemples précédents, vous savez que grâce au mot clé global, les fonctions pouvaient
récupérer les valeurs des variables globales.
Sachez qu'il est également possible de modifier la valeur d'une variable d'un script (une variable
globale) grâce à une fonction en utilisant un passage de variable par référence.
Le passage par référence se caractérise par l'utilisation d'un & avant le nom de votre variable dans
les arguments de votre fonction.
Exemple 1:
<?php
$toto = 5;
function ma_fonction ($var)
{
$var++;
}
ma_fonction(&$toto);
echo $toto; // Ce script affichera : 6
?>
Pour les personnes qui ont fait du C, le passage par référence s'assimile à la notion de pointeur.
En passant une variable par référence à une fonction, nous ne passons pas en fait la variable en
elle-même (la preuve : notre fonction utilise une variable $var alors qu'elle modifie tout de même
la valeur de la variable $toto du script courant) mais une référence vers la zone mémoire où est
stockée la valeur de notre variable $toto.
Notre fonction modifie alors directement cette zone mémoire en lui donnant une nouvelle valeur,
ce qui explique que dans le script courant, et bien la valeur de $toto a changé.
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...
Exemple 2:
<?
function dire_texte($qui, &$texte)
{
$texte = "Bienvenue $qui";
}
$chaine = "Bonjour ";
dire_texte("cher phpeur",$chaine);
echo $chaine; // affiche "Bienvenue cher phpeur"
?>
Initiation au langage PHP Page 35 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
7.4. Retourner plusieurs variables
Lorsque vous souhaitez qu'une fonction retourne plusieurs valeurs, le plus simple est d'utiliser un
tableau.
<?
function nom_fonction()
{
.....
return array( $variable1, $variable2, $variable3 );
// on retourne les valeurs voulues dans un tableau
}
$retour = nom_fonction();
echo "$retour[0] - $retour[1] - $retour[2]";
?>
<?PHP
function calcul($a, $b)
{
$add = $a+$b;
$sous = $a-$b;
$multi = $a*$b;
$div = $a/$b;
return array($add, $sous, $multi, $div);
}
list($add, $sous, $multi, $div) = calcul(30, 6);
// affiche le resultat
echo $add . '<br />';
echo $sous . '<br />';
echo $multi . '<br />';
echo $div . '<br> /';
?>
7.5. 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
?>
Initiation au langage PHP Page 36 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
7.6. Les fonctions standards d’affichage
PHP 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'une 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 et printf
7.6.1. La fonction echo
La fonction echo permet d'envoyer au navigateur la chaîne de caractères (délimitée par des
guillemets ou des cotes simples) 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.
Prenons un autre exemple où nous allons afficher la date et l'heure du jour.
On a le code suivant :
<?
$date_du_jour = date ("d-m-Y");
$heure_courante = date ("H:i");
echo 'Nous sommes le : ';
echo $date_du_jour;
echo ' Et il est : ';
echo $heure_courante; //affiche: Nous sommes le 25-10-2005 Et il est
11:59
?>
Dans ce cas, nous venons d'utiliser la fonction date() qui nous permet d'afficher la date du jour
ainsi que l'heure courante (en fait, la date du serveur). Dans un premier temps, nous avons
affecté à la variable $date_du_jour le contenu que retourne la fonction date() munie des
Initiation au langage PHP Page 37 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
paramètres "d-m-Y", soit 27-09-2005, puis nous avons affecté à la variable $heure_courante le
contenu que retourne la fonction date() munie des paramètres "H:i", soit 11:59.
Voici la liste des paramètres possibles pour la fonction date() :
- a : "am" (matin) ou "pm" (après-midi)
- A : "AM" (matin) ou "PM" (après-midi)
- d : Jour du mois, sur deux chiffres (éventuellement avec un zéros) : "01" à "31"
- D : Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi)
- F : Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier)
- h : Heure, au format 12h, "01" à "12"
- H : heure, au format 24h, "00" à "23"
- g : Heure, au format 12h sans les zéros initiaux, "1" à "12"
- G : Heure, au format 24h sans les zéros initiaux, "0" à "23"
- i : Minutes; "00" à "59"
- j : Jour du mois sans les zéros initiaux: "1" à "31"
- l : Jour de la semaine, textuel, version longue; en anglais, i.e. "Friday" (pour Vendredi)
- L : Booléen pour savoir si l'année est bissextile ("1") ou pas ("0")
- m : Mois; i.e. "01" à "12"
- n : Mois sans les zéros initiaux; i.e. "1" à "12"
- M : Mois, en trois lettres (et en anglais) : par exemple "Jan" (pour Janvier)
- s : Secondes; i.e. "00" à "59"
- S : Suffixe ordinal d'un nom
- w : Jour de la semaine au format numérique 0 (pour dimanche) à 6 (pour samedi)
7.6.2. La fonction print
La fonction print est similaire à la fonction echo .
La syntaxe de la fonction print est la suivante:
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); // affiche le resultat de (1+2)x87
les parenthèses ne sont pas obligatoires mais question de lisibilité
7.6.3. 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 formatée);
Une chaîne formaté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
Initiation au langage PHP Page 38 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
la fonction printf. Les valeurs à insérer dans la chaîne formatées sont séparées par des virgules et
doivent apparaître dans l'ordre où les codes apparaissent dans la chaîne formaté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);
Initiation au langage PHP Page 39 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
VIII.FONCTION MAIL
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.
8.1. La fonction mail()
En PHP il existe une fonction très simple qui permet d'envoyer un email. Voilà sa syntaxe
Entier mail(chaîne email_destinataire,
chaîne Sujet,
chaîne corps_du_message,
chaîne options);
Le dernier champ est facultatif, on en parlera juste après. Dans un premier temps nous allons
envoyer un email de base. Voilà le nouveau code du fichier traitant les données envoyées par le
formulaire précédant :
<?
mail( "webmaster@ntic.ci", "Commentaire sur le site ", "$nom a laissé
un commentaire à propos de www.ntic.ci: nn$texte" );
?>
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()
8.2. Les options / en-têtes
Le champ options de la fonction mail permet d'ajouter une en-tête au message que l'on envoie.
On peut par exemple y mettre la date, le logiciel utilisé pour envoyer l'email ou encore l'adresse de
retour...
Voilà un exemple d'en-tête à utiliser lors d'un envoi de mail :
$from_email = "contact@ntic.ci";
$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(
"webmaster@ntic.ci",
"Commentaire sur le site",
"$nom a laissé un commentaire à propos de www.ntic.ci: nn$texte",
Initiation au langage PHP Page 40 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
$entetemail
);
8.3. La fonction email()
La fonction email() remplace parfois la fonction mail() chez 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(chaîne compte,chaîne destinataire,chaîne titre,chaîne
message[,options]);
Initiation au langage PHP Page 41 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
IX.NOTION DE VARIABLES D'ENVIRONNEMENT
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,...
9.1. Les variables d'environnement
On peut donc classer les variables d'environnement en deux catégories:
Les variables d'environnement dépendant du client
Les variables d'environnement dépendant du serveur
9.1.1. Les variables d'environnement dépendant du client
Variable
d'environnement
Description
$AUTH_TYPE
Il s'agit de la méthode d'authentification qui a été utilisée par le
client pour accéder au script PHP
$COMSPEC
Location de l'interpréteur de commandes sur la machine (Sous
Windows)
$CONTENT_TYPE
Type de données contenu présent dans le corps de la requête. Il
s'agit du type MIME des données
$DOCUMENT_ROOT Racine des documents sur le serveur
$DOCUMENT_URI Adresse du script PHP en relatif (à partir de la racine du serveur)
$HTTP_ACCEPT Types MIME reconnus par le serveur (séparés par des virgules)
$HTTP_ACCEPT_ENCODING Types d'encodage que le serveur peut réaliser (gzip,deflate)
$HTTP_ACCEPT_LANGUAGE Langue utilisée par le serveur (par défaut en-us)
$HTTP_CONNECTION
Type de connexion ouverte entre le client et le serveur (par
exemple Keep-Alive)
$HTTP_HOST Nom d'hôte de la machine du client (associée à l'adresse IP)
$HTTP_REFERER URL de la page qui a appelé le script PHP
$HTTP_USER_AGENT
Cette variable permet d'avoir des informations sur le type de
navigateur utilisé par le client, ainsi que son système d'exploitation.
Voici quelques exemples de User-Agents:
Mozilla/4.0 (compatible; MSIE 5.01; Windows NT; TUCOWS
Network)
Mozilla/4.7 [en] (X11; I; Linux 2.2.14-15mdk i686)
$LAST_MODIFIED Date et heure de dernière modification du fichier
$PATH Il s'agit du chemin d'accès aux différents répertoires sur le serveur
$PATH_INFO
Il s'agit du chemin d'accès au script PHP en relatif (de la racine du
serveur jusqu'au script PHP)
$PHP_SELF Nom du script PHP
$REDIRECT_STATUS Il s'agit de l'état de la redirection (echec ou succès)
$REDIRECT_URL Il s'agit de l'URL vers laquelle le navigateur du client a été redirigé
Initiation au langage PHP Page 42 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
$QUERY_STRING
Il s'agit de la partie de l'URL (ayant servi à accéder au script PHP)
située après le point d'interrogation. C'est de cette manière que
sont transmises les données d'un formulaire dans le cas de la
méthode GET
$REMOTE_ADDR Cette variable contient l'adresse IP du client appelant le script CGI
$REMOTE_PORT
Cette variable permet de savoir le port sur lequel la requête HTTP
a été envoyée au serveur
$SCRIPT_FILENAME
Chemin d'accès complet au script PHP
Sous windows, il sera de la forme:
c:/php/php.exe
$SCRIPT_NAME
Chemin d'accès relatif (par rapport au chemin d'accès à la racine
web ($DOCUMENT_ROOT)) au script PHP
9.1.2. Les variables d'environnement dépendant du serveur
Variable d'environnement Description
$DATE_GMT Date actuelle au format GMT
$DATE_LOCAL Date actuelle au format local
$DOCUMENT_ROOT Racine des documents Web sur le serveur
$GATEWAY_INTERFACE Version des spécifications CGI utilisées par le serveur
$HTTP_HOST Nom de domaine du serveur
$SERVER_ADDR Adresse IP du serveur
$SERVER_ADMIN Adresse de l'administrateur du serveur
$SERVER_NAME Nom donné au serveur en local
$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
$SERVER_SOFTWARE Type (logiciel) du serveur web
Pour un serveur Apache sous Unix:
Apache/1.3.2 (Unix) PHP/3.0.5
Pour un serveur Apache sous Windows:
Apache/1.3.2 (Win32) PHP/3.0.5
9.2. Affichage des variables d'environnement
Il est possible de créer un script permettant de visualiser l'ensemble des variables
d'environnement.
La première façon consiste à utiliser la fonction phpinfo() qui affiche toute seule un tableau
récapitulatif des paramètres du serveur et de l'intepréteur PHP, ainsi qu'un tableau des variables
d'environnement
<?
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");
?>
Initiation au langage PHP Page 43 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Enfin il est possible de définir des variables d'environnement :
<?
echo putenv("MA_VARIABLE=mavaleur");
?>
Initiation au langage PHP Page 44 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
X.LA GESTION DES FICHIERS AVEC PHP
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
paramètre aux fonctions spécialisées pour le manipuler.
10.1. 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 :
entier fopen(chaine nomdufichier, chaine mode);
Le mode indique le type d'opération qu'il sera possible d'effectuer sur le fichier après ouverture. Il
s'agit d'une lettre (en réalité une chaîne de caractères) indiquant l'opération possible:
r (comme read) indique une ouverture en lecture seulement
w (comme write) indique une ouverture en écriture seulement (la fonction crée le fichier s'il
n'existe pas)
a (comme append) indique une ouverture en éciture seulement avec ajout du contenu à la fin du
fichier (la fonction crée le fichier s'il n'existe pas)
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
R ouverture en lecture seulement
W ouverture en écriture seulement (la fonction crée le fichier s'il n'existe pas)
A
ouverture en écriture seulement avec ajout du contenu à la fin du fichier (la fonction
crée le fichier s'il n'existe pas)
R+ ouverture en lecture et écriture
W+ ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas)
A+
ouverture en lecture et écriture avec ajout du contenu à la fin du fichier (la fonction
crée le fichier s'il n'existe pas)
Voici des exemples d'utilisations possibles de cette fonction:
$fp = fopen("../fichier.txt","r"); //lecture
$fp = fopen("http://www.cup.ci/fichier.txt","w"); //écriture depuis
début du fichier
$fp = fopen("http://www.cup.ci/fichier.txt","a"); //écriture depuis
fin du fichier
De plus, la fonction fopen permet d'ouvrir des fichiers présents sur le web grâce à leur URL. Voici
un script permettant de récupérer le contenu d'une page d'un site site web:
<?
$fp = fopen("http://www.cup.ci/fichier.txt","r"); //lecture du fichier
while (!feof($fp)) { //on parcourt toutes les lignes
Initiation au langage PHP Page 45 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
$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.cup.ci/fichier.txt","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()
10.2. 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
entier fputs(entier Etat_du_fichier, chaine Sortie);
La fonction fputs() renvoie le nombre de caractères effectivement écrits dans le fichier
fgets() permettant de récupérer une ligne du fichier
chaîne fgets(entier Etat_du_fichier, entier Longueur);
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, la chaîne 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)) {
// On récupère une ligne
$Ligne = fgets($fp,255);
// On affiche la ligne
echo $Ligne;
// On stocke l'ensemble des lignes dans une variable
Initiation au langage PHP Page 46 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
$Fichier .= $Ligne;
}
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("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.ntic.ci/index.html","r"); //lecture du fichier
while (!feof($fp)) { //on parcourt 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);
?>
10.3. Les tests de fichiers
PHP fournit de nombreuses fonctions permettant de faire des tests sur les fichiers pour connaître
leurs propriétés. Voici la liste des fonctions des test:
is_dir()
is_dir() permet de savoir si le fichier dont le nom est passé en paramètre correspond à un
répertoire
booléen is_dir(chaine Nom_du_fichier);
La fonction is_dir() renvoie 1 si il s'agit d'un répertoire, 0 dans le cas contraire
<?
if (!is_dir("install")) {
echo "Il ne s'agit pas d'un répertoire
";
}
else {
echo "Il s'agit bien d'un répertoire
";
}
?>
Initiation au langage PHP Page 47 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
is_executable()
Permet de savoir si le fichier dont le nom est passé en paramètre est exécutable
booléen is_executable(chaine Nom_du_fichier);
La fonction is_executable() renvoie 1 si le fichier est exécutable, 0 dans le cas contraire
is_file()
Permet de savoir si le fichier dont le nom est passé en paramètre ne correspond ni à un répertoire,
ni à un lien symbolique
booléen is_file(chaine Nom_du_fichier);
La fonction is_file() renvoie 1 si il s'agit d'un fichier, 0 dans le cas contraire
is_link()
Permet de savoir si le fichier dont le nom est passé en paramètre correpond à un lien symbolique
booléen is_link(chaine Nom_du_fichier);
La fonction is_link() renvoie 1 si il s'agit d'un lien symbolique, 0 dans le cas contraire
10.4. Quelques fonctions de manipulation de fichiers
basename -- Sépare le nom du fichier et le nom du dossier.
chgrp -- Change le groupe propriétaire d'un fichier
chmod -- Change le mode du fichier
chown -- Change le groupe propriétaire du fichier
clearstatcache -- Efface le cache de stat()
copy -- Copie un fichier
delete -- Effacer
dirname -- Renvoie le nom du dossier
disk_free_space -- Renvoie l'espace disque disponible dans le répertoire.
disk_total_space -- Retourne la taille d'un dossier
diskfreespace -- Alias de disk_free_space()
fclose -- Ferme un fichier
feof -- Teste la fin du fichier
fflush -- Envoi tout le contenu généré dans un fichier
fgetc -- Lit un caractère dans un fichier
fgetcsv -- Renvoie la ligne courante et cherche les champs CSV
fgets -- Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier.
fgetss -- Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier et élimine les
balises HTML
file_exists -- Vérifie si un fichier existe
file_get_contents -- Lit tout un fichier dans une chaîne
file_put_contents -- Ecrit une chaîne dans un fichier
file -- Lit le fichier et renvoie le résultat dans un tableau
fileatime -- Renvoie la date à laquelle le fichier a été accédé pour la dernière fois.
filectime -- Renvoie l'heure à laquelle l'inode a été accédé pour la dernière fois.
filegroup -- Lire le nom du groupe
fileinode -- Renvoie le numéro d'inode du fichier
filemtime -- Renvoie la date de dernière modification du fichier.
fileowner -- Renvoie le nom du propriétaire du fichier
fileperms -- Renvoie les permissions affectées au fichier.
filesize -- Renvoie la taille du fichier
filetype -- Retourne le type de fichier
flock -- Verrouille le fichier
fnmatch -- Repère un fichier à partir d'un masque
Initiation au langage PHP Page 48 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
fopen -- Ouverture d'un fichier ou d'une URL
fpassthru -- Affiche le reste du fichier
fputs -- Ecrit dans un fichier
fread -- Lecture du fichier en mode binaire
fscanf -- Analyse un fichier en fonction d'un format
fseek -- Modifie le pointeur de fichier
fstat -- Lit les informations sur un fichier à partir d'un pointeur de fichier
ftell -- Renvoie la position du pointeur du fichier
ftruncate -- Tronque un fichier
fwrite -- Ecriture du fichier en mode binaire
glob -- Recherche des chemins qui vérifient un masque
is_dir -- Indique si le nom de fichier est un dossier
is_executable -- Indique si le fichier est exécutable
is_file -- Indique si le fichier est un véritable fichier.
is_link -- Indique si le fichier est un lien symbolique.
is_readable -- Indique si un fichier est autorisé en lecture
is_uploaded_file -- Indique si le fichier a été téléchargé par HTTP POST
is_writable -- Indique si un fichier est autorisé en écriture
is_writeable -- Indique si un fichier est autorisé en écriture
link -- Crée un lien
linkinfo -- Renvoie les informations à propos d'un lien
lstat -- Retourne les informations à propos d'un fichier ou d'un lien symbolique.
mkdir -- Crée un dossier
move_uploaded_file -- Déplace un fichier téléchargé
parse_ini_file -- Traite un fichier de configuration
pathinfo -- Retourne des informations sur un chemin système
pclose -- Ferme un processus de pointeur de fichier
popen -- Crée un processus de pointeur de fichier
readfile -- Affiche un fichier
readlink -- Renvoie le nom du fichier vers lequel pointe un lien symbolique
realpath -- Retourne le chemin canonique absolu
rename -- Renomme un fichier ou un dossier
rewind -- Replace le pointeur de fichier au début
rmdir -- Efface un dossier
set_file_buffer -- Alias de stream_set_write_buffer()
stat -- Renvoie les informations à propos d'un fichier
symlink -- Crée un lien symbolique
tempnam -- Crée un fichier avec un nom unique
tmpfile -- Crée un fichier temporaire
touch -- Modifie la date de modification et de dernier accès d'un fichier
umask -- Change le "umask" courant
unlink -- Efface un fichier
Initiation au langage PHP Page 49 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
XI.LES EXPRESSIONS REGULIERES
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...
11.1. Construire une expression régulière
Les expressions régulières permettent de rechercher des occurrences (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ère 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.
"^debut": chaine qui commence par "debut"
"fin$": chaine qui se termine par "fin"
"^chaine$": chaine qui commence et se termine par "chaine"
"abc": chaine contenant la chaine "abc"
Les symboles *, + et ?, respectivement "zero ou plusieurs", "un ou plusieurs", "un ou aucun",
permettent de donner une notions de nombre.
"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.
"abc{2}": chaine qui contient "ab" suivie de deux "c" ("abcc")
"abc{2,}": chaine qui contient "ab" suivie de deux "c" ou plus ("abcc"
etc..)
"abc{2,4}": chaine qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" ..
"abcccc")
A noter que le premier nombre de la limite ("{0,2}", mais pas "{,2}") est obligatoire. Les symboles
vu précedemment ('*', '+', and '?') sont équivalents à "{0,}", "{1,}", et "{0,1}".
Les parenthèses ( ) permettent de représenter une séquence de caractères.
"a(bc)*": chaine qui contient "a" suivie de zero "bc" ou plus
La barre verticale | se comporte en tant qu'opérateur OU
Initiation au langage PHP Page 50 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
"un|le": chaine qui contient "un" ou "le"
"(un|le) chien": chaine qui contient "un chien" ou "le chien"
"(a|b)*": chaine qui contient une suite de "a" ou de "b"
Le point . indique n'importe quel caractère (une fois)
"^.{3}$": chaine qui contient 3 caractères
Les crochets [ ] définissent une liste de caractères autorisés (ou interdits). Le signe - permet
quand à lui de définir un intervalle. Le caractère ^ après le premier crochet indique quand à lui
une interdiction.
"[abc]": chaine qui contient un "a", un "b", ou un "c"
"[a-z]": chaine qui contient un caractère compris entre "a" et "z"
"[^a-zA-Z]": chaine qui ne commence pas par une lettre
Pour rechercher un caractère faisant partie des caractères spéciaux, il suffit de le faire précéder
d'un antislash (sauf entre crochets)
un antislash doit donc être doublé!
En effet dans les crochets, chaque caractère représente ce qu'il est. Pour représenter un ] il faut le
mettre en premier (ou après un ^ si c'est une interdiction), un - se met en premier ou en dernier.
"[+?{}.]": chaine qui contient un de ces six caractères
"[]-]": chaine qui contient le caractère "]" ou le caractère "-"
Voici un tableau récapitulatif des caractères spéciaux utilisés dans les expressions régulières:
Caractère Utilité
[] Les crochets définissent une liste de caractères autorisés
() Les parenthèses définissent un élément composé de l'expression régulière qu'elle
contient
{} Les accolades lorsqu'elles contiennent un ou plusieurs chiffres séaprés par des
virgules représente le nombre de fois que l'élément précédant les accolades peut se
reproduire (par exemple p{2,5} correspond à ppp, pppp ou ppppp
- Un moins entre deux caractères dans une liste représente un intervalle (par exemple
[a-d] représente [abcd])
. Le caractère point représente un caractère unique
* Le caractère astérisque indique la répétition indéterminée de l'élément la précédant
? Le caractère "point d'interrogation indique la présence éventuelle de l'élément la
précédant
| 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 .. "
Initiation au langage PHP Page 51 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
11.2. Les classes de caractères
Il peut également être utile de vérifier si une chaîne contient des caractères d'un certain type
(numérique, alphanumérique, ...) sans avoir à les énumérer. Pour cela les expressions régulières
définissent des classes de caractères, dont la syntaxe est:
[: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:]+$"
11.3. Les fonctions de manipulation d'expressions régulières
PHP fournit quelques fonctions de bases permettant de manipuler des chaînes à l'aide
d'expressions régulières.
11.3.1. Les fonctions ereg() et eregi()
La fonction ereg() dont la signature est la suivante :
Booleen ereg(chaine modele,chaine texte[,tableau occurences])
permet d'évaluer le texte passer en argument grâce au modèle (qui est une expression régulière)
et stocke toutes les occurences dans un tableau passé optionnellement en paramètre. Lorsque la
fonction trouve des occurences, elle renvoie true, sinon elle retourne false.
Initiation au langage PHP Page 52 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
La fonction eregi() dont la signature est la suivante :
Booleen eregi(chaine modele,chaine texte[,tableau occurences])
effectue le même travail que sa consoeur ereg(), à la différence près qu'elle n'est pas sensible à la
casse (pas de différenciation minuscules/majuscules) .
<?
$fp = fopen("http://www.cup.ci/index.php","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
// $regs[0] renvoie toute la chaine
fclose($fp);
?>
Exemple
Test si une adresse électronique est valide
< ?
$mail=$_POST[“mail”];
if(eregi("^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a-
z]{2,4}$",$mail))
{
........
}
?>
11.3.2. Les fonctions ereg_replace() et eregi_replace()
La fonction ereg_replace() dont la signature est la suivante :
chaine ereg_replace(chaine modele,chaine remplacement,chaine texte)
Permet de retourner la chaine texte passée en arguments avec les occurences trouvees
remplacées par la chaine de remplacement.
Pour utiliser les occurences correspondant au modele dans la chaine de remplacement, il suffit
d'utiliser des parenthèses dans la chaine modele, puis de faire référence à ces éléments dans la
chaine de remplacement en utilisant deux signes antislash suivi d'un numéro identifiant l'élément
entre 0 et 9 (les numéros sont donnés par ordre d'imbriquement, puis de gauche à droite, le zéro
représente la chaine entière).
Le code suivant remplace Toto par <b>Toti Toto</b>... inutile mais formateur.
$Texte = "Bienvenue a Toto dans le mondes des expressions régulières";
$Texte = ereg_replace("To(to)","<b>1ti 0</b>",$Texte);
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ériques
commençant par http://par le même texte (sans le http://) entre balises HTML hypertexte...):
$Texte = "Bienvenue sur http://www.cup.fr";
Initiation au langage PHP Page 53 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
$Texte = ereg_replace("(http://)(([[:punct:]]|[[:alnum:]])*)","<a
href="0">2</a>",$Texte);
La fonction eregi_replace() dont la signature est la suivante :
chaine eregi_replace(chaine modele,chaine remplacement,chaine texte)
effectue le même travail que sa consoeur ereg_replace(), à la différence près qu'elle n'est pas
sensible à la casse (pas de différenciation minuscules/majuscules).
11.3.3. La fonction split()
La fonction split() possède la syntaxe suivante:
tableau split (chaîne expression, chaîne texte [, entier limite])
La fonction split() retourne un tableau à partir d'une chaine et d'une expression régulière. La
limite, optionnelle permet de limiter la taille du tableau retourné. Dans ce cas le dernier élément
du tableau contient le reste de la chaine. Si une erreur se produit, split retourne 0.
<?
// 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
?>
11.3.4. La fonction sql_regcase()
La fonction sql_regcase() possède la syntaxe suivante:
chaine sql_regcase (chaine texte)
Elle retourne une expression régulière qui représente la chaine passée en paramètre sans tenir
compte de la case. Chaque caractère de la chaine est representé entre crochets, avec deux
caractères à l'intérieur un en majuscule et l'autre en minuscule, ou le cas échéant deux fois le
même caractères. Aucune explication ne vaut un bon exemple ;)
<?
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
?>
Initiation au langage PHP Page 54 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
XII.CREATION D’IMAGES
12.1. 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, ...).
12.2. Comment utiliser ces fonctions
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.php">).
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.
booléen imagegif(entier image, chaîne NomDuFichier);
La fonction imagegif() ne fonctionne pas avec PHP4
Notez que vous pouvez utiliser imagepng() et imagejpg()!
La fonction imagecreate() permet de créer un identifiant pour une image vierge possèdant les
dimensions indiquées en paramètres.
entier imagecreate(entier largeur,entier hauteur);
La fonction imagecreatefromgif() permet de créer un identifiant pour l'image créée à partir d'une
image GIF existant sur le disque, en passant en paramètre le nom du fichier.
entier createimagefromgif(chaîne NomDuFichier);
Enfin la fonction imagedestroy() permet de vider la mémoire allouée à l'image dont on a passé
l'identifiant en paramètre.
booléen imagedestroy(entier image);
Initiation au langage PHP Page 55 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Voilà donc un script minimal (et inutile) créant une image PHP à partir d'une image présente sur le
disque:
<?php
headers("Content-Type: image/gif");
$image = imagecreatefromgif("toto.gif");
imagegif($image);
?>
12.3. L'allocation de couleur
La majeure partie des fonctions de la librairie GD permet de créer une image,
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).
entier imagecolorallocate(entier image, entier rouge,entier vert,
entier bleu);
Voici quelques exemples d'allocation de couleurs avec cette fonction (avec les composantes en
hexadécimal ou en entier):
$noir = imagecolorallocate($image,0,0,0);
$rouge = imagecolorallocate($image,255,0,0);
$vert = imagecolorallocate($image,0,0xFF,0);
12.4. 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
imagearc(entier image,entier x,entier y,entier
largeur,entier hauteur,entier début,entier
fin,entier couleur)
Crée un arc de centre (x,y) dont la largeur et la
hauteur sont en pixels. Début et fin représentent
les angles de début et de fin (le degré 0 est à
trois heures) en tournant dans le sens des
aiguilles d'un montre
imagedashedline(entier image,entier Trace un trait pointillé entre les points
Initiation au langage PHP Page 56 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
xdebut,entier ydebut,entier xfin,entier
yfin,entier couleur)
(xdebut,ydebut) et (xfin,yfin) de la couleur
spécifiée
imagefilledpolygon(entier image,tableau
coordonnees,entier nonbre,entier couleur)
Crée un polygone de la couleur spécifiée, dont
les points sont stockes dans un tableau de
valeurs (x,y). Le nombre de points du tableau à
utiliser est spécifié en paramètre nombre
imagefilledrectangle(entier image,entier
xgauchehaut,entier ygauchehaut,entier
xdroitebas,entier ydroitebas,entier couleur)
Crée un rectangle rempli avec la couleur
spécifiée, et dont les coins supérieur gauche et
inférieur droit sont spécifiés en argument
imageline(entier image,entier xdebut,entier
ydebut,entier xfin,entier yfin,entier couleur)
Trace un trait entre les points (xdebut,ydebut) et
(xfin,yfin) de la couleur spécifiée
imagepolygon(entier image,tableau
coordonnees,entier nonbre,entier couleur)
Crée un polygone non rempli dont le contour est
de la couleur spécifiée, dont les points sont
stockes dans un tableau de valeurs (x,y). Le
nombre de points du tableau à utiliser est
spécifié en paramètre nombre
imagerectangle(entier image,entier
xgauchehaut,entier ygauchehaut,entier
xdroitebas,entier ydroitebas,entier couleur)
Crée un rectangle nom rempli dont le contour est
de la couleur spécifiée, et dont les coins
supérieur gauche et inférieur droit sont spécifiés
en argument
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);
?>
Deux fonctions supplémentaires vous permettront de remplir une zone avec une couleur:
Fonction Description
imagefill(entier image,entier
x,entier y,entier couleur)
Remplit une zone d'une même couleur par la couleur spécifiée
en argument, en commençant le remplissage à partir du point
indiqué en paramètre
imagetoborder(entier
image,entier x,entier y,entier
couleurbordure,entier couleur)
Remplit une zone délimitée par une bordure d'une couleur,
par la couleur spécifiée en argument, en commençant le
remplissage à partir du point indiqué en paramètre
12.5. Les chaînes de caractères
PHP permet d'autre part de dessiner des chaînes de caractères dans une image grâce à une
grande variété de fonctions dédiées. Cela autorise ainsi la création de légendes ou de boutons
dynamiques, en fonction du texte passé en paramètre, stocké dans un fichier, ou bien dans une
base de données.
La principale fonction permettant de créer des chaînes de caractères dans l'image est
imagestring() :
Initiation au langage PHP Page 57 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
booléen imagestring(entier image,entier police,entier x,entier y,chaine
texte,entier couleur);
Cette fonction permet de créer une chaîne de caractères contenant le texte passé en argument à
la position spécifiée par les arguments (x,y) avec la police indiquée.
En réalité PHP propose 5 polices par défaut numérotées de 0 à 5, mais il est possible de spécifier
une police p[ersonnalisée grâce à la fonction imageloadfont() :
Entier imageloadfont(chaîne Nom_du_Fichier);
Le format du fichier de police passé en paramètre peut varier selon le système sur lequel PHP
fonctionne...
Enfin, les fonctions imagefontwidth() et imagefontheight() renvoient la largeur et la hauteur de la
police passée en unique paramètre. Ainsi, il est facile de connaître le nombre de pixels que va
occuper la chaîne entière:
$largeur = imagefontwidth($police) * strlen($text);
$hauteur = imagefontheight($police);
Voici un tableau présentant les fonctions de création de chaînes de caractères graphiques:
Fonction Description
booléen imagechar(entier
image,entier police,entier x,entier
y,chaîne caractere,entier couleur)
Crée un caractère à l'emplacement (x,y) (position de l'angle
supérieur gauche du caractère). La police du caractère
peut-être choisie parmi les polices par défaut (1 à 5) ou
bien une police personnalisé que vous avez ouvert
précédemment avec imageloadfont()
booléen imagecharup(entier
image,entier police,entier x,entier
y,chaîne caractere,entier couleur)
Crée un caractère orienté à l'horizontale (rotation de 90°) à
l'emplacement (x,y) (position de l'angle supérieur gauche
du caractère). La police du caractère peut-être choisie
parmi les polices par défaut (1 à 5) ou bien une police
personnalisé que vous avez ouvert précédemment avec
imageloadfont()
entier imagefontheight(entier
police)
retourne la hauteur de la police utilisée
entier imagefontwidth(entier police) retourne la largeur de la police utilisée
entier imageloadfont(chaîne
nom_du_fichier)
Charge la police dont le nom est passé en argument et
retourne son identifiant
booléen imagestring(entier
image,entier police,entier x,entier
y,chaîne texte,entier couleur)
Crée une chaîne de caractères à l'emplacement (x,y)
(position de l'angle supérieur gauche de la chaîne de
caractère). La police du caractère peut-être choisie parmi
les polices par défaut (1 à 5) ou bien une police
personnalisé que vous avez ouvert précédemment avec
imageloadfont()
Booléen imagestringup(entier
image,entier police,entier x,entier
y,chaîne texte,entier couleur)
Crée une chaîne de caractères orientée verticalement
(rotation de 90°) à l'emplacement (x,y) (position de l'angle
supérieur gauche de la chaîne de caractère). La police du
caractère peut-être choisie parmi les polices par défaut (1 à
5) ou bien une police personnalisé que vous avez ouvert
précédemment avec imageloadfont()
Initiation au langage PHP Page 58 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
12.6. Un diagramme de visiteurs
On définit un tableau contenant le nombre de page vues par mois : par exemple, on suppose que
1500 pages du site ont été vues en janvier, 2450 en février, etc… Bien sur, pour que ce script soit
vraiment valides, vous n'allez pas déclarer ce tableau, car sinon, les bâtons seront toujours les
mêmes :) Vous allez plutôt effectuer une requête SQL sur votre base de données permettant de
récupérer le nombre de pages vues de votre site par mois. Ensuite, il suffira d'appeler le script
avec ces 12 paramètres dans votre page html (en faisant par exemple : <img
src="./stats_year.php?visite_par_mois[1]=1500& visite_par_mois[2]=2400…….">)
<?php
$visite_par_mois[1]=1500;
$visite_par_mois[2]=2450;
$visite_par_mois[3]=1400;
$visite_par_mois[4]=1780;
$visite_par_mois[5]=1900;
$visite_par_mois[6]=2450;
$visite_par_mois[7]=1684;
$visite_par_mois[8]=1845;
$visite_par_mois[9]=3450;
$visite_par_mois[10]=1980;
$visite_par_mois[11]=1234;
$visite_par_mois[12]=5000;
$total=0;
for ($i=1; $i<=12; $i++)
{
$total += $visite_par_mois[$i];
}
// on calcule le nombre de pages vues sur l’année
$max_visite = max($visite_par_mois);
// on spécifie le type d'image que l'on va créer, ici ce sera une image
au format JPEG
if (headers_sent())
{
print('<meta http-equiv="Content-type"
content="image/jpeg">');
}
else
{
header ("Content-type: image/jpeg");
}
// on définit la largeur et la hauteur de notre image
$largeur = 400;
$hauteur = 250;
/* on crée une ressource pour notre image qui aura comme largeur
$largeur et $hauteur comme hauteur (on place également un or die si la
création se passait mal afin d'avoir un petit message d'alerte)*/
$im = @ImageCreate ($largeur, $hauteur) or die ("Erreur lors de la
création de l'image");
Initiation au langage PHP Page 59 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
/* on place tout d'abord la couleur blanche dans notre table des
couleurs (je vous rappelle donc que le blanc sera notre couleur de fond
pour cette image).*/
$blanc = ImageColorAllocate ($im, 255, 255, 255);
/* on place aussi le noir dans notre palette, ainsi qu'un bleu foncé et
un bleu clair*/
$noir = ImageColorAllocate ($im, 0, 0, 0);
$rouge = ImageColorAllocate ($im, 255, 0, 0);
$bleu_fonce = ImageColorAllocate ($im, 0, 130, 195);
$bleu_clair = ImageColorAllocate ($im, 95, 160, 240);
// on dessine un trait horizontal pour représenter l'axe du temps
ImageLine ($im, 20, $hauteur-40, $largeur-80, $hauteur-40, $noir);
// on affiche le numéro des 12 mois
for ($i=1; $i<=12; $i++) {
if ($i==1) {
ImageString ($im, 2, 25, $hauteur-38, $i, $noir);
}
else {
ImageString ($im, 2, ($i)*25, $hauteur-38, $i, $noir);
}
}
// on dessine un trait vertical pour représenter le nombre de pages vues
ImageLine ($im, 20, 30, 20, $hauteur-40, $noir);
// on dessine un trait vertical pour représenter le nombre de pages vues
//ImageLine ($im, 25*13, 30, 25*13, $hauteur-40, $noir);
// on affiche les legendes sur les deux axes ainsi que différents textes
(note : pour que le script trouve la police verdana, vous devrez placer
la police verdana dans un repertoire /fonts/)
imagettftext($im, 14, 0, $largeur-70, $hauteur-30, $noir,
"Fonts/verdana.ttf", "Mois");
imagettftext($im, 14, 0, 10, 20, $noir, "Fonts/verdana.ttf", " % pages
vues");
imagettftext($im, 14, 0, $largeur-250, 20, $noir, "Fonts/verdana.ttf",
"Statistiques pour l'année 2005");
// on parcourt les douze mois de l'année
for ($mois=1; $mois <= 12; $mois++) {
if ($visite_par_mois[$mois]!="0") {
// on calcule la hauteur du baton
$hauteurImageRectangle =
ceil(((($visite_par_mois[$mois])*($hauteur-50))/$max_visite));
if ($mois=="1") {
// si le mois est janvier, on affiche notre premier baton
// on affiche le premier baton noir
ImageFilledRectangle ($im, 25, $hauteur-
$hauteurImageRectangle, 25+14, $hauteur-41, $noir);
// on affiche le second baton, bleu foncé, qui sera un peu
plus petit que le noir afin de recouvrir une partie du noir
Initiation au langage PHP Page 60 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
ImageFilledRectangle ($im, 27, $hauteur-
$hauteurImageRectangle+2, 25+12, $hauteur-41-1, $bleu_fonce);
// on affiche le dernier baton, bleu clair, qui sera un peu
plus petit que le bleu foncé afin de recouvrir une partie du bleu foncé
(on obtiendra ainsi un effet de dégradé)
ImageFilledRectangle ($im, 29, $hauteur-
$hauteurImageRectangle+2, 25+8, $hauteur-41-1, $bleu_clair);
imagettftext($im, 10, 0, 25, ($hauteur-$hauteurImageRectangle)-3,
$rouge, "Fonts/verdana.ttf",
round(($visite_par_mois[$mois]/$total)*100));
}
else {
// si le mois est different de janvier, on affiche les
autres batons
ImageFilledRectangle ($im, ($mois)*25, $hauteur-
$hauteurImageRectangle, ($mois)*25+14, $hauteur-41, $noir);
ImageFilledRectangle ($im, ($mois)*25+2, $hauteur-
$hauteurImageRectangle+2, ($mois)*25+12, $hauteur-41-1, $bleu_fonce);
ImageFilledRectangle ($im, ($mois)*25+6, $hauteur-
$hauteurImageRectangle+2, ($mois)*25+8, $hauteur-41-1, $bleu_clair);
imagettftext($im, 10, 0, ($mois)*25, ($hauteur-
$hauteurImageRectangle)-3, $rouge, "Fonts/verdana.ttf",
round(($visite_par_mois[$mois]/$total)*100));
}
}
}
// on dessine le tout
Imagejpeg ($im);
?>
Initiation au langage PHP Page 61 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
XIII. LES SESSIONS ET LES COOKIES
13.1. Les sessions
Les sessions sont importantes pour la sécurité de vos scripts.
En effet, afin de transmettre des variables de pages en pages, plusieurs possibilités s'offrent à
vous :
- les divers champs des formulaires, qu'ils soient hidden ou non.
- passer les variables directement à travers les liens.
- utiliser les cookies.
- utiliser les sessions.
Cependant, toutes ces possibilités n'offrent pas le même niveau de sécurité.
En effet, certaines de ces possibilités sont vraiment pratiquent dans leurs modes d'utilisation
(comme les cookies par exemple mais tout le monde n'est pas obligé d'accepter les cookies), ce
qui implique, dans la majorité des cas, un bas niveau de sécurité (cas du passage des variables
par les liens, ce qui implique que les variables seront visibles de tout le monde).
De même, faire dans chaque page un formulaire contenant des champs hidden permettant de
faire circuler les différentes variables à travers toutes les pages du site n'est pas vraiment
pratique.
C'est pourquoi, dans tous ces cas où la sécurité de vos données est primordiale, vous devrez
utiliser les sessions qui vous permettront de faire circuler différentes variables (comme un mot de
passe par exemple) à travers les pages de votre site, tout en étant assez confortables à l'emploi.
Pour utiliser les sessions, différentes fonctions PHP s'offrent à nous. Voici déjà un petit tableau
vous permettant de vous familiariser avec ces différentes fonctions (que nous détaillerons bien sur
dans la suite de ce tutorial) :
Fonction Signification
Session_start Démarre une session
Session_register Enregistre une variable de session
Session_unregister Efface une variable de session
Session_is_registered Vérifie si une variable est déclarée pour la session en cours
session_id Retourne l'id de la session en cours
Session_name Retourne le nom de la session en cours
Session_unset Detruit toutes les variables de la session en cours
Session_destroy Destruit la session en cours
Attention !!!
Avant d'aller plus loin, vous devez savoir que les sessions ne sont accessibles qu'à partir de PHP 4.
Cependant, je vous rassure, la plupart des hébergeurs supportent aujourd'hui PHP 4.
Afin de voir concrètement comment fonctionnent les sessions, prenons alors un exemple simple :
- imaginons que notre site possède une section membre où chaque membre devra se logué avant
de pouvoir y entrer.
- de plus, on aimerait bien être sur qu'il s'agisse toujours de ce même membre qui est connecté.
Initiation au langage PHP Page 62 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
On aura alors une page contenant un formulaire permettant à notre visiteur de se connecter à une
section membre (page index.htm) :
<form action="login.php" method="post">
Votre login : <input type="text" name="login">
<br>
Votre mot de passé : <input type="password" name="pwd"><br>
<input type="submit" value="Connexion">
</form>
D'après cette page, vous pouvez remarquer que lorsque le visiteur le remplira et qu'il cliquera sur
le bouton de connexion, on se retrouvera au niveau de la page login.php avec une variable
$pseudo qui contiendra le login de notre visiteur ainsi qu'une variable $pwd contenant son mot de
passe ; variables qu'il faudra naturrellement tester avant de démarrer notre session (car seuls les
membres pourront accéder à notre espace membre, espace où l'on utilisera notre session).
On aura par exemple (page login.php) :
<?php
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['pwd']))
{
/*on vérifie les informations du formulaire, à savoir si le pseudo saisi
est bien un pseudo autorisé, de même pour le mot de passe*/
if ($_POST['login'] ==$login_valide && $pwd_valide == $_POST['pwd'])
{
/ dans ce cas, tout est ok, on peut démarrer notre session
// on la démarre :)
session_start ();
/*on enregistre les paramètres de notre visiteur comme variables
de session ($login et $pwd) (notez bien que l'on utilise pas le $
pour enregistrer ces variables)*/
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
// on redirige notre visiteur vers une page de notre
section membre
header ('location: page_membre.php');
}
}
?>
Voyons alors le code de la page de notre section membre, la page page_membre.php.
On a :
<?php
// On démarre la session (ceci est indispensable dans toutes les pages
de notre section membre)
session_start ();
Initiation au langage PHP Page 63 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
// On teste pour voir si nos variables ont bien été enregistrées
if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) {
echo '<html>';
echo '<head>';
echo '<title>Page de notre section membre</title>';
echo '</head>';
echo '<body>';
echo 'Votre login est '.$_SESSION['login'].' et votre mot de
passe est '.$_SESSION['pwd'].'.';
echo '<br>';
// On affiche un lien pour fermer notre session
echo '<a href="./logout.php">Déconnection</a>';
}
else {
echo 'Les variables ne sont pas déclarées.';
}
?>
Voyons alors le code de la page permettant au membre de se déconnecter (la page logout.php).
On aura alors :
<?php
// On démarre la session
session_start ();
// On détruit les variables de notre session
session_unset ();
// On détruit notre session
session_destroy ();
// On redirige le visiteur vers la page d'accueil
header ('location: index.htm');
?>
- chaque session à un id différent (ce qui permet d'éviter la confusion entre les connexions).
- à chaque page où notre session doit être active, on doit placer un session_start en tout
début de page (avant tout code HTML).
- toutes les variables enregistrées au cours de notre session, seront accessibles dans les
pages de notre session.
- n'oubliez JAMAIS de détruire vos variables de session lors de la déconnexion.
En respectant ces règles vous pourrez très rapidement faire vous-même votre espace membre,
voir même pourquoi pas une boutique en ligne :)
13.2. Les cookies
PHP permet de gérer très facilement les cookies ; 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.
13.2.1. 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
Initiation au langage PHP Page 64 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
cookies dans les en-têtes HTTP
Voici la syntaxe de la fonction setcookie:
booléen setcookie(chaîne NomDuCookie,
chaîne Valeur,
entier expiration,
chaîne chemin,
chaîne domaine,
entier securisé);
L'argument NomDuCookie est celui qui vous permettra de faire référence à un cookie spécifique
stocké sur le disque des utilisateurs. A chaque cookie correspond un nom auquel une valeur est
attribuée.
Les arguments suivants servent à déterminer les conditions de validité du cookie:
expiration: détermine le moment à partir duquel le cookie sera effacé du disque du client. Elle doit
être passée sous forme d'un entier indiquant le nombre de secondes à compter du 1er
janvier 1970
à partir desquelles le cookies n'est plus valide. Il est généralement d'usage d'utiliser la fonction
now() qui retourne le nombre de secondes de cette date à maintenant et d'y ajouter le nombre de
secondes de validités que l'on désire. Pour un cookie valide pendant un an ce sera
now()+31536000. Dans certains cas la fonction mktime() peut s'avérer elle aussi très pratique
chemin désigne le répertoire à partir de la racine de votre domaine pour lequel votre cookie est
valide, c'est-à-dire que si vous ne voulez utiliser le cookie que dans des scripts stockÉs dans le
répertoire /commerce il faudra définir le chemin /commerce/
domaine il s'agit du domaine de votre serveur, celui-ci doit obligatoirement contenir 2 points (par
exemple www.ntic.ci). Par défaut (si vous omettez ce paramètre) le domaine qui a créé le cookie
(donc le votre) sera automatiquement inséré
sécurisé lorsqu'il est mis à 1 indique que le cookie ne sera transmis que si la ligne est sécurisée
(par SSL ou S-HTTP
La fonction setcookie() doit être utilisée avant tout envoi de données HTML vers le navigateur,
même si ces données sont envoyées avec echo, print ou équivalent (le script qui la contient doit
donc être placé avant la balise <HTML> et avant toute fonction echo(),print ou printf()).
Le cookie n'est pas visible avant le prochain chargement de page.
Avec PHP si vous envoyez plusieurs cookies de suite, les appels seront traités en ordre inverse,
alors qu'avec PHP4 il seront traités dans l'ordre.
Il est possible d'utiliser des tableaux dans un cookie. Autant de cookies que d'éléments du tableau
seront alors envoyés, mais tout se fait de façon transparente, puisque à la lecture un tableau sera
créé. Il est quand même préférable d'utiliser les fonctions implode et explode pour envoyer ainsi
qu'un seul cookie.
Il faut savoir que certains navigateurs ne traitent pas bien les cookies
Microsoft Internet Explorer 4 avec le Service Pack 1 ne traite pas correctement les cookies qui
ont le paramètre chemin défini.
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.
13.2.2. Exemple d'utilisation de cookies
Voilà donc un script permettant de savoir si un visiteur est déjà venu sur le site pendant le mois:
<?php
setcookie(
"Visites",
"Oui",
Initiation au langage PHP Page 65 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
time()+2592000,
"/",
".cup.ci",0);
?>
Quelques autres exemples:
<?php
// Envoi d'un cookie qui disparaîtra après la fermeture du navigateur
SetCookie("CcmUserSessionCookie","$login:$pass");
// Envoi d'un cookie qui restera présent 24 heures
SetCookie("CcmDejaVisite","1",time()+3600*24,"/",".phpfrance.com",0);
// Envoi d'un cookie qui s'effacera le 1er janvier 2001
SetCookie("CcmAn2000","1",mktime(0,0,0,1,1,2001),"/",".phpfrance.com",0)
;
?>
13.2.3. Récupérer les valeurs d'un cookie
Lorsqu'un cookie pour votre domaine est présent sur le disque du client, si celui-ci visite une de
vos pages PHP dont le chemin est inclut dans le paramètre chemin (si le chemin est / le cookie est
valide pour toutes les pages de votre site) le cookie sera automatiquement passé en paramètre à
votre script et sa valeur sera directement accessible dans la variable $NomDuCookie.
Voici le même script que précédemment permettant cette fois ci de compter le nombre de visite
de la page par le visiteur:
<?php
$Visites++;
setcookie(
"Visites",
$Visites,
time()+2592000,
"/",
".ntic.ci",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.
13.2.4. 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);
?>
Initiation au langage PHP Page 66 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
XIV.NOTION DE CLASSES
14.1. introduction
Php gère la programmation orientée objet à l’aide de classes.
Exemple :
class Voiture { // déclaration de la classe
var $couleur; // déclaration d’un attribut
var $belle = TRUE; // initialisation d’un attribut
function voiture() { // constructeur
$this->couleur = ‘’noire’’;
} // le mot clé $this faisant référence à l’objet est
obligatoire
function Set_Couleur($couleur) {
$this->couleur = $couleur;
}
}
$mavoiture = new Voiture(); // création d’une instance
$mavoiture->Set_Couleur(‘’blanche’’); // appel d’une méthode
$coul = $mavoiture->couleur; // appel d’un attribut
14.2. sousclasse
Le système de classes de php est très succint, il ne gère que l’héritage simple.
Exemple :
class Voituredeluxe extends Voiture { // déclaration de la sous classe
var $couleur;
function voituredeluxe() { // constructeur
$this->Voiture();
}
function Set_Couleur($couleur) {
$this->couleur = $couleur;
}
function Get_Couleur() {
return $this->couleur;
}
}
La nouvelle classe Voituredeluxe hérite de tous les attributs et méthodes de la classe parente
Voiture dont elle est une extension (extends). Il est possible de surcharger les méthodes, d’en
déclarer de nouvelles, etc.
14.3. Quelques fonctions :
get_declared_classes() : retourne un tableau listant toutes les classes définies
class_exists($str) : vérifie qu'une classe dont le nom est passé en argument a été définie
get_class($obj), get_parent_class : retournent le nom de la classe de l’objet $obj
get_class_methods($str) : retourne les noms des méthodes de la classe $str dans un tableau
Initiation au langage PHP Page 67 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
get_class_vars($str) : retourne les valeurs par défaut des attributs de la classe $str dans un
tableau associatif
get_object_vars($obj) : retourne un tableau associatif des attributs de l’objet $obj les clés
sont les noms des attributs et les valeurs, celles des attributs si elles existent
is_subclass_of($obj,$str) : détermine si l’objet $obj est une instanciation d’une sous-classe de
$str, retourne VRAI ou FAUX
method_exists($obj,$str) : vérifie que la méthode $str existe pour une classe dont $obj est
une instance, retourne VRAI ou FAUX
14.4. remarque
Tout objet instancié est une variable et peut à se titre être passé en argument à une fonction ou
bien être un retour de fonction ou encore être sauvegardée en donnée de session.
Il n’existe pas de destructeur : comme en Java, les objets qui cessent d’être utilisés sont
automatiquement détruits.
Il n’y a pas de notion de visibilité : tous les attributs et méthodes sont publiques et une classe
hérite forcément de tous les attributs et méthodes de son père.
Une classe fille hérite de tous les attributs et méthodes de la classe parente dont elle est une
extension (d’ou la syntaxe extends). Il est possible de surcharger les méthodes, d’en définir de
nouvelles…
Initiation au langage PHP Page 68 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
XV.INTRODUCTION AUX BASES DE DONNEES (MYSQL)
15.1. Introduction
MySQL est une base de données implémentant le langage de requête SQL un langage relationnel
très connu. Cette partie suppose connue les principes des bases de données relationnelles.
Il existe un outil libre et gratuit développé par la communauté des programmeurs libres :
phpMyAdmin qui permet l’administration aisée des bases de données MySQL avec php. Il est
disponible sur : http://sourceforge.net/projects/phpmyadmin/ et http://www.phpmyadmin.net.
Avec MySQL vous pouvez créer plusieurs bases de données sur un serveur. Une base est composée
de tables contenant des enregistrements.
Plus d'informations sont disponibles à http://www.mysql.com/.
La documentation de MySQL est disponibles à http://www.mysql.com/documentation/, ainsi qu'en
français chez nexen : http://dev.nexen.net/docs/mysql/.
15.2. Connexion à une base de données
Pour se connecter à une base depuis php, il faut spécifier un nom de serveur, un nom d’utilisateur,
un mot de passe et un nom de base.
Les fonctions de connexion :
mysql_connect($server,$user,$password) : permet de se connecter au serveur $server en
tant qu’utilisateur $user avec le mot de passe $password, retourne l’identifiant de connexion si
succès, FALSE sinon
mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne TRUE en cas de
succès, sinon FALSE
mysql_close([$id]) : permet de fermer la connexion
mysql_pconnect : idem que mysql_connect sauf que la connection est persistante, il n’y a
donc pas besoin de rouvrir la connexion à chaque script qui travaille sur la même base.
Les identifiants de connexion ne sont pas nécessaires si on ne se connecte qu’à une seule base à
la fois, ils permettent seulement de lever toute ambiguïté en cas de connexions multiples.
Exemple 1 :
<?PHP
$mysql_host = 'localhost'; // entrer le serveur d’hebegement
$mysql_user = 'root'; // entrer nom utilisateur
$mysql_password =''; // entrer mot de passe
// on se connecte au server mysql
$db = mysql_connect($mysql_host, $mysql_user, $mysql_password) or
die("erreur de connexion");
// selection de la base
mysql_select_db($mysql_base,$db) or die ("erreur de connexion à la
base");
?>
On pourra avantageusement intégrer ce code dans un fichier que l’on pourra joindre par
include(). C’est aussi un moyen de sécuriser le mot de passe de connexion.
Initiation au langage PHP Page 69 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Une connexion persistante évite d’avoir à rouvrir une connexion dans chaque script. Les
connexions sont automatiquement fermées au bout d’un certain temps en cas d’absence de toute
activité…
15.3. manipulation
15.3.1. cretaion de requete
Pour envoyer une requête à une base de donnée, il existe la fonction : mysql_query($str) qui
prend pour paramètre une chaîne de caractères qui contient la requête écrite en SQL et retourne
un identificateur de résultat ou FALSE si échec.
Les requêtes les plus couramment utilisées sont : CREATE (création d’une table), SELECT
(sélection), INSERT (insertion), UPDATE (mise à jour des données), DELETE (suppression),
ALTER (modification d’une table), etc.
Exemple :
$result = mysql_query(‘’SELECT address FROM users WHERE name=’’$name’’’’);
Cet exemple recherche l’adresse de l’utilisateur portant pour nom la valeur de la chaîne $name.
L’identificateur de résultat $result permettra à d’autres fonctions d’extraire ligne par ligne les
données retournées par le serveur.
Attention, contrairement à Oracle SQL, les requêtes MySQL ne se terminent pas par un point
virgule ‘;’ et n’autorisent pas les SELECT imbriqués.
Une fois la requête effectuée et l’identificateur de résultat acquis, il ne reste plus qu’à extraire les
données retournées par le serveur.
Sous Oracle, l’affichage des résultats d’une requête se fait ligne par ligne, sous MySQL, c’est
pareil. Une boucle permettra de recueillir chacune des lignes à partir de l’identifiant de résultat.
SQL > SELECT * FROM users;
ID NAME ADDRESS
----------------------------
1 Soro Korhogo ← 1ère ligne
2 Kanga Daoukro ← 2ème ligne
3 Atte Abidjan ← 3è ligne
Une ligne contient (sauf cas particulier) plusieurs valeurs correspondant aux différents attributs
retournés par la requête. Ainsi, une ligne de résultat pourra être sous la forme d’un tableau, d’un
tableau associatif, ou d’un objet.
15.3.2. Extraction en tableau simple
mysql_fetch_row($result) : retourne une ligne de résultat sous la forme d’un tableau. Les
éléments du tableau étant les valeurs des attributs de la ligne. Retourne FALSE s’il n’y a plus
aucune ligne.
Exemple 1 :
$requet = "SELECT * FROM user"’;
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_row($result)) {
$id = $ligne[0];
$name = $ligne[1];
$address = $ligne[2];
echo"$id - $name, $addres <br/>";
}
} else {
echo "Erreur de requête de base de données. ";
}
Initiation au langage PHP Page 70 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Ici, on accède aux valeurs de la ligne par leur indice dans le tableau.
15.3.3. Extraction en tableau associatif
mysql_fetch_array($result) : retourne un tableau associatif. Les clés étant les noms des
attributs et leurs valeurs associées leurs valeurs respectives. Retourne FALSE s’il n’y a plus aucune
ligne.
Exemple 2 :
$requet = "SELECT * FROM users";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_array($result)) {
$id = $ligne["id"];
$name = $ligne["name"];
$address = $ligne["address"];
echo "$id - $name, $address <br/>";
}
} else {
echo "Erreur de requête de base de données. ";
}
Ici, on accède aux valeurs de la ligne par l’attribut dans le tableau associatif.
15.3.4. Extraction en objet
mysql_fetch_object($result) : retourne un objet. Les attributs de l’objet correspondent à ceux
de la ligne de résultat. Et les valeurs des attributs de l’objet correspondent à ceux de la ligne de
résultat. Retourne FALSE s’il n’y a plus aucune ligne.
Exemple 3 :
$requet = "SELECT * FROM users";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_object($result)) {
$id = $ligne->id;
$name = $ligne->name;
$address = $ligne->address;
echo "$id - $name, $address <br />";
}
} else {
echo "Erreur de requête de base de données. ";
}
Ici, on accède aux valeurs par leur attribut dans l’objet.
15.4. Quelques fonctions supplémentaires très utiles
mysql_free_result($result) : efface de la mémoire du serveur les lignes de résultat de la
requête identifiées par $requet. Très utile pour améliorer les performances du serveur.
mysql_insert_id([$id]) : retourne l’identifiant d’un attribut clé primaire AUTO_INCREMENT de
la dernière insertion.
mysql_num_fields($result) : retourne le nombre d’attributs du résultats.
mysql_num_rows($result) : retourne le nombre de lignes du résultats. Et ainsi permet de
remplacer le while par un for.
Penser à bien tester la valeur de retour des fonctions (mysql_query et les autres) afin de
détecter toute erreur et d’éviter de polluer votre page avec des Warnings.
Initiation au langage PHP Page 71 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
XVI.MINI PROJET
Un livre d’or dans un espace membre avec espace administration.
Initiation au langage PHP Page 72 sur 72
__________________________________________________________________________
Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009
Sources
http://www.commentcamarche.com
Jean-François Pillou
http://cyberzoide.developpez.com
Hugo Etiévant 12 0octobre 2002
http://www.easyphp.org
http://dev.nexen.net
http://lwest.free.fr/doc/php/
http://www.phpfrance.com
http://fr.php.net/
http://www.devshed.com/Server_Side/PHP/Introduction/
http://clauer.citeweb.net/php3tut/php3_tut.html
http://www.lephpfacile.com/manuel_php/

INITIATION_PHP_NAB_2009

  • 1.
  • 2.
    Initiation au langagePHP Page 2 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 SOMMAIRE AVERTISEMENT ............................................................................................................................. 4   I.   PRESENTATION ................................................................................................................. 5   1.1.   Origines ............................................................................................................................ 5   1.2.   principaux atouts.......................................................................................................... 5   1.3.   SGBD supportés par PHP........................................................................................... 6   II.   IMPLEMENTATION DU CODE........................................................................................ 7   2.1.   L'interprétation du code par le serveur ............................................................... 7   2.2.   Implantation au sein du code HTML...................................................................... 7   2.3.   Les commentaires ........................................................................................................ 8   2.4.   Typologie.......................................................................................................................... 8   III.   INSTALLATION SOUS WINDOWS............................................................................... 9   3.1.   Introduction à WampServer..................................................................................... 9   3.2.   Installation ...................................................................................................................... 9   3.3.   Editer votre site........................................................................................................... 11   3.4.   Autres outils.................................................................................................................. 11   IV.   CONCEPT DE VARIABLES AVEC PHP....................................................................... 12   4.1.   Declaration et type .................................................................................................... 12   4.2.   Nommage des variables........................................................................................... 12   4.3.   Variables scalaires...................................................................................................... 12   4.4.   Variables tableaux...................................................................................................... 13   4.5.   Tests sur les variables.............................................................................................. 16   4.6.   Définition de constantes .......................................................................................... 16   V.   LES OPERATEURS........................................................................................................... 17   5.1.   Les opérateurs arithmétiques .............................................................................. 17   5.2.   Les opérateurs d'assignation ................................................................................. 17   5.3.   Les opérateurs d'incrémentation / Décrémentation ..................................... 18   5.4.   Les opérateurs de comparaison............................................................................ 19   5.5.   Les opérateurs logiques (booléens) .................................................................... 19   5.6.   (Les opérateurs bit-à-bit)........................................................................................ 20   5.7.   (Les opérateurs de rotation de bit) ..................................................................... 20   5.8.   Autres opérateurs....................................................................................................... 21   5.9.   Les priorités .................................................................................................................. 21   VI.   STRUCTURES CONDITIONNELLES........................................................................... 23   6.1.   La notion de bloc ........................................................................................................ 23   6.2.   Les primitives de choix............................................................................................. 23   6.3.   L'instruction if ... elseif ... else.............................................................................. 24   6.4.   Les boucles.................................................................................................................... 26   VII.   LA NOTION DE FONCTION.......................................................................................... 30   7.1.   La déclaration d'une fonction................................................................................. 30   7.2.   Appel de fonction........................................................................................................ 30   7.3.   Portée (visibilité) des variables............................................................................. 32   7.4.   Retourner plusieurs variables................................................................................ 35   7.5.   La récursivité................................................................................................................ 35   7.6.   Les fonctions standards d’affichage................................................................... 36   VIII.   FONCTION MAIL.............................................................................................................. 39   8.1.   La fonction mail() ....................................................................................................... 39   8.2.   Les options / en-têtes............................................................................................... 39  
  • 3.
    Initiation au langagePHP Page 3 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 8.3.   La fonction email()..................................................................................................... 40   IX.   NOTION DE VARIABLES D'ENVIRONNEMENT .................................................... 41   9.1.   Les variables d'environnement ............................................................................. 41   9.2.   Affichage des variables d'environnement ......................................................... 42   X.   LA GESTION DES FICHIERS AVEC PHP.................................................................. 44   10.1.   La fonction fopen() .................................................................................................... 44   10.2.   Lecture et écriture...................................................................................................... 45   10.3.   Les tests de fichiers................................................................................................... 46   10.4.   Quelques fonctions de manipulation de fichiers............................................. 47   XI.   LES EXPRESSIONS REGULIERES.............................................................................. 49   11.1.   Construire une expression régulière................................................................... 49   11.2.   Les classes de caractères........................................................................................ 51   11.3.   Les fonctions de manipulation d'expressions régulières............................. 51   XII.   CREATION D’IMAGES.................................................................................................... 54   12.1.   Prérequis........................................................................................................................ 54   12.2.   Comment utiliser ces fonctions............................................................................. 54   12.3.   L'allocation de couleur.............................................................................................. 55   12.4.   La création de formes............................................................................................... 55   12.5.   Les chaînes de caractères ....................................................................................... 56   12.6.   Un diagramme de visiteurs..................................................................................... 58   XIII.   LES SESSIONS ET LES COOKIES ............................................................................. 61   13.1.   Les sessions.................................................................................................................. 61   13.2.   Les cookies.................................................................................................................... 63   XIV.   NOTION DE CLASSES ................................................................................................... 66   14.1.   introduction................................................................................................................... 66   14.2.   sousclasse...................................................................................................................... 66   14.3.   Quelques fonctions : ................................................................................................. 66   14.4.   remarque ....................................................................................................................... 67   XV.   INTRODUCTION AUX BASES DE DONNEES (MYSQL)....................................... 68   15.1.   Introduction .................................................................................................................. 68   15.2.   Connexion à une base de données...................................................................... 68   15.3.   manipulation................................................................................................................. 69   15.4.   Quelques fonctions supplémentaires très utiles............................................. 70   XVI.   MINI PROJET..................................................................................................................... 71  
  • 4.
    Initiation au langagePHP Page 4 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 AVERTISEMENT Cet ouvrage s’adresse aux étudiants des filières informatiques et à tous ceux qui sont passionnés de la programmation informatique en generale et en particulier du developpement web dynamique. Pour toutes vos remarques et suggestion contactez nabeledi@yahoo.fr
  • 5.
    Initiation au langagePHP Page 5 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 I.PRESENTATION 1.1. Origines C’est un langage incrusté au HTML et interprété côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (comme un script écrit en Javascript ou une applet Java ...). Il dérive du C et du Perl dont il reprend la syntaxe. Il est extensible grâce à de nombreux modules et son code source est ouvert. Comme il supporte tous les standards du web et qu’il est gratuit, il s’est rapidement répandu sur la toile. Le langage PHP a été créé 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 donné 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 Gutmans rejoignirent 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. Le nouveau moteur, appelé 'Zend Engine' (combinaison des noms de Zeev et Andi), atteint ces objectifs avec succès, et la première version fut publiée vers la mi-1999. PHP 4.0, s'appuyant sur ce moteur et amélioré par un grand nombre de nouvelles fonctionnalités fut publié officiellement en mai 2000, presque 2 ans après son prédécesseur. En plus de performances nettement plus élevées, PHP 4.0 apportait le support de nombreux serveurs web, les sessions HTTP, la bufferisation de sortie, une sécurité accrue des informations visiteurs et plusieurs nouvelles structures de langage. Hypertext Preprocessor (acronyme récursif à l’exemple du système Open Source Linux : Is Not UniX) est la signification officielle de PHP. En juillet 2000 plus de 300.000 sites tournaient sous PHP ! PHP 5 est sorti en Juillet 2004 après un long développement et plusieurs pré-versions. Il est régi par son moteur, le Zend Engine 2.0 avec un nouveau modèle et des dizaines de nouvelles fonctionnalités. 30 juin 2009 , PHP 5.3 est enfin disponible en version finale . La dernière mise à jour est la 5.3.2 datant du 4 mars 2010 La nouvelle monture de la plateforme star du Web est en cours de préparation : PHP 6 avec l’amélioration de la Programmation Orienté Objet, l’amélioration et sécurisation des fonctionnalités, 1.2. principaux atouts La gratuité et la disponibilité du code source (PHP 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)
  • 6.
    Initiation au langagePHP Page 6 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 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 disponible sur les plateformes Linux, et Windows). L'intégration au sein de nombreux serveurs web (Apache, Microsoft IIS, ...) 1.3. SGBD supportés par PHP PHP permet un interfaçage simple avec de nombreux SGBD. PHP supporte les SGBD suivants (la liste est évolutive): Adabas D DBase Empress FilePro Informix Interbase MSQL MySQL Oracle PostgreSQL Solid Sybase Velocis Unix dbm Hyperwave IBM DB2 Ingres FrontBase Ovrimos FilePro (lecture seule) Il existe aussi des couches d'abstraction de base de données comme DBX qui vous permettent de vous connecter de manière transparente à toute base de données supportée par cette extension. De plus, PHP supporte ODBC, ce qui vous permet de vous connecter à toute autre base de données qui supporte ce standard. PHP supporte de nombreux protocoles comme par exemple LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (sous Windows) et encore d'autres. Vous pouvez ouvrir des sockets réseau, et intéragir avec n'importe quel autre protocole. PHP supporte le format complexe WDDX, qui permet de communiquer entre tous les langages web. En terme d'interconnexion, PHP supporte aussi les instanciations d'objets Java, et les utilise de manière transparente comme objets intégrés. Vous pouvez aussi exploiter les objets distants avec CORBA. PHP dispose de fonctionnalités extrêmement utiles pour le traitement de texte, allant des expressions régulières POSIX étendues ou Perl aux traitements des fichiers XML, avec les standards SAX et DOM. Vous pouvez utiliser les transformations XSLT. En commerce électronique, vous trouverez des outils de paiement intégrés comme Cybercash, CyberMut, VeriSign Payflow Pro et CCVS, pour réaliser des paiements en ligne.
  • 7.
    Initiation au langagePHP Page 7 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 II.IMPLEMENTATION DU CODE 2.1. L'interprétation du code par le serveur 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 ".php" ou".php3" ou ".php4" ou ".php5" pour être interprété par le serveur! Ainsi, lorsqu'un navigateur (le client) désire accéder à une page dynamique réalisé en php: le serveur reconnaît qu'il s'agit d'un fichier php il lit le fichier php Dès que le serveur rencontre une balise indiquant que les lignes suivantes sont du code php, il "passe" en mode php, 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 au serveur A la fin du script, le serveur transmet le résultat au client (le navigateur) Le code php stocké sur le serveur n'est donc jamais visible directement par le client puisque dès qu'il en demande l'accès, le serveur l'interprète! De cette façon aucune modification n'est à apporter sur les navigateurs... 2.2. Implantation au sein du code HTML Pour que le script soit interprété par le serveur deux conditions sont nécessaires: Le fichier contenant le code doit avoir l'extension .php et non .htm Le code php contenu dans le code HTML doit être délimité par les balises <?php et ?> ou <? et ?> ou <script language="php"> et </script> Exemple Voici l'exemple le plus utilisé de script php: <?php echo "bonjour monde"; // affiche bonjour monde ?> On notera bien évidemment que la fonction echo permet d'afficher sur le navigateur la chaîne délimitée par les guillemets... Le séparateur d'instructions est le point virgule ; . Il est obligatoire, sauf si l'instruction est suivie de la balise ?>
  • 8.
    Initiation au langagePHP Page 8 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 2.3. 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 ou 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 code. Commentaire sur une ligne: // ou # Commentaire sur plusieurs lignes: /* ... */ 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 Les commentaires ne peuvent pas couper un mot du code en deux 2.4. Typologie La manière d'écrire les choses en langage PHP a son importance. Le langage PHP est 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().
  • 9.
    Initiation au langagePHP Page 9 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 III.INSTALLATION SOUS WINDOWS 3.1. Introduction à WampServer Afin de faire fonctionner PHP, il est nécessaire à la base d'en télécharger les sources depuis un site spécialisé (par exemple PHP.net), puis de les compiler (ainsi que d'éditer les liens) afin de créer un fichier exécutable. Ce processus demande des notions avancées en informatique, c'est pourquoi un adepte de PHP (Romain Bourdon) a mis au point un package WampServer contenant 3 produits incontournables de la scène PHP : Le serveur Web Apache Le moteur de scripts PHP4 La base de données MySQL WampServer est ainsi un pack fonctionnant sous Windows permettant d'installer en un clin d'oeil les éléments nécessaires au fonctionnement d'un site web dynamique développé en PHP Le pack WampServer est disponible sur http://www.wampserver.com Il vous suffit dans un premier temps de télécharger et installer la version la plus récente (à ce jour WampServer 2.0i) 3.2. Installation Double cliquez sur le fichier téléchargé et laissez vous guider. Tout est géré par l'installeur de WampServer. Par défaut, WampServer est livré avec les toutes dernières versions de Apache, MySQL et PHP. Si tout va bien, vous devriez voir apparaître un petit symbole en bas à droite de votre barre des tâches, un symbole blanc ( il est tout à gauche) : Si ce symbole a un fond blanc comme ici, c'est parfait. Si le fond est jaune ou rouge, cela signifie que les services ne se sont pas installés correctement, ou qu'ils n'ont pu démarrer. Dans le doute, relancez Wampserver après l'avoir quitté proprement (clic droit, exit). Une fois Wampserver installé, vous allez pouvoir consulter sa page d'accueil par défaut (réalisée en PHP).
  • 10.
    Initiation au langagePHP Page 10 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Pour ce faire : • Invoquez localhost du menu contextuel de wampserver Ou bien • Démarrez votre navigateur web, puis tapez dans la bare d'adresses ceci : http://localhost/ OU http://127.0.0.1/ . (si un autre service web n’est pas activé sur le port 80 de la machine)
  • 11.
    Initiation au langagePHP Page 11 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Les deux adresses ci-dessus représentant votre machine locale. 3.3. Editer votre site Pour créer votre site web dynamique avec WampServer, il vous suffit de déposer vos créations dans le sous-répertoire www/ de wamp/ depuis la racine du disque d’intallation. Par exemple créez un fichier phpinfo.php texte contenant le texte suivant : <? phpinfo(); ?> Déposez-le dans le sous répertoire /www. Vous pouvez désormais visualiser le résultat à l'adresse suivante: http://localhost/phpinfo.php ou http://127.0.0.1/phpinfo.php 3.4. Autres outils Des packages peuvent remplacer WampServer et sont laissés à l’appréciation du lecteur. EasyPhp Inclu : • Apache • MySQL • PHP XAMPP Uune "distribution" d'Apache qui contient également • Apache • MySQL • PHP et PERL LAMP Sur Linux mais disponible aussi pour windows inclut • Apache • Mysql • Php
  • 12.
    Initiation au langagePHP Page 12 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 IV.CONCEPT DE VARIABLES AVEC PHP 4.1. Declaration et type 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. Le typage des variables est implicite en php. Il n’est donc pas nécessaire de déclarer leur type au préalable ni même de les initialiser avant leur utilisation. Les identificateurs de variable sont précédés du symbole « $ » (dollars). Exemple : $nabson . Les variables peuvent être de type : • entier (integer), • réel (double), • chaîne de caractères (string), • tableau (array), • objet (object), • booléen (boolean). Il est possible de convertir une variable en un type primitif grâce au cast (comme en C). Exemple : $str = ’’12’’; // $str vaut la chaîne ‘’12’’ $nbr = (int)$str; // $nbr vaut le nombre 12 4.2. Nommage des variables Avec PHP, les noms de variables doivent répondre à certains critères: Un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou un "_" (pas par un chiffre) Un nom de variable peut comporter des lettres, des chiffres et le caractère _ (les espaces ne sont pas autorisés!) Nom de variable correct Nom de variable incorrectRaison $Variable $Nom de Variable comporte des espaces $Nom_De_Variable $123Nom_De_Variable commence par un chiffre $nom_de_variable $toto@mailcity.com caractère spécial @ $nom_de_variable_123 $Nom-de-variable signe – interdit $nom_de_variable nom_de_variable ne commence pas par $ 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... 4.3. Variables scalaires Le 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) chaînes de caractères: ensembles de caractères entre guillemets simples ou doubles 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.
  • 13.
    Initiation au langagePHP Page 13 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Instruction Type de la variable $Variable = 0; type entier $Variable = 12; type entier $Variable = 0.0; type réel $Variable = 12.0; type réel $Variable = "0.0"; type chaîne $Variable = "Bonjour tout le monde"; type chaîne Il existe des caractères repérés par un code ASCII spécial permettant d'effectuer des opérations particulières. Ces caractères peuvent être représentés plus simplement en langage PHP grâce au caractère '' suivi d'une lettre, qui précise qu'il s'agit d'un caractère de contrôle: Caractère Description " Guillemet barre oblique inverse (antislash) r retour chariot n retour à la ligne t Tabulation 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'ambiguïté... 4.4. Variables tableaux 4.4.1. Géneralités 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. Pour créer un tableau, utiliser la fonction array( ); Exemple Déclaration $fruits = array(); Affectation $fruits[0]= "pomme"; $fruits[1]= "banane"; $fruits[] = "orange"; // equivaut a $fruits[2]= "orange" ou $fruits= array( "pomme", "banane", "orange" ); 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:
  • 14.
    Initiation au langagePHP Page 14 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 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. 4.4.2. Tableaux multidimensionnels Comme nous l'avons déjà vu dans sur les tableaux à une dimension (les vecteurs), nous savons que nous pouvons mettre absolument tout ce que l'on veut dans chaque casier de notre tableau. Y compris même un autre tableau. Hé bien c'est exactement comme ça qu'on déclare un tableau à deux dimensions. Si l'on ne sait pas à l'avance ce que l'on va mettre dans chaque casier, on déclare ce tableau de la manière suivante : $Tableau = array(array()) ; 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] = "ntic"; $Tableau[1][0] = 123.4567; $Tableau[1][1] = "Au revoir"; 4.4.3. Tableau associatif Un tableau associatif est un tableau dont l'index est une chaine de caractère au lieu d'un nombre. On parle aussi de ``hash array'' ou ``hash''. Cette façon de nommer les indices peut parfois être plus agréable à utiliser.Le tableau associatif se déclare comme un tableau traditionnel Exemple1 Déclaration $personne = array(); Affectation $personne["Nom"] = "Konan"; $personne["Prénom"] = "Jules"; $personne["Age"] = 31; L’initialisation d’un tableau associatif est similaire à celle d’un tableau normal. Exemple 2 $personne = array("Nom" => "Konan", "Prénom" => "Jules", "Age" => 31 ); Les exemples 1 et 2 sont equivalents Ici à la clé "Nom" est associée la valeur "Konan". 4.4.4. Quelques fonctions relatives aux tableaux : a) sizeof Renvoie le nombre d'éléments d'un tableau. Équivalent de count $sz= sizeof( $tablo ); b) is_array Renvoie true si la variable est de type tableau (ou tableau associatif), false sinon.
  • 15.
    Initiation au langagePHP Page 15 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 c) reset reset($tablo) Place le pointeur interne sur le premier élément du tableau: Chaque variable tableau possède un pointeur interne repérant l'élément courant. d) end end($tablo) Place le pointeur interne du tableau sur le dernier élément du tableau. e) current Renvoie l'élément courant du tableau. f) next Déplace le pointeur vers l'élément suivant, et renvoie cet élément. Renvoie false s’il n'existe pas . g) prev Déplace le pointeur vers l'élément précédent, et renvoie cet élément. Renvoie false s’il n'existe pas Exemple $transport = array('pied', 'velo', 'voiture', 'avion'); $mode = current($transport); // $mode = 'pied'; $mode = next($transport); // $mode = 'velo'; $mode = next($transport); // $mode = 'voiture'; $mode = prev($transport); // $mode = 'velo'; $mode = end($transport); // $mode = 'avion'; h) each $a=each($tablo) Renvoie l'index et la valeur courante dans un tableau à 2 éléments; $a[0] contient l'index, $a[1] la valeur. i) list list( $scalar1, $scalr2, ... ) Construit un tableau temporaire à partir des variables scalaires passées en argument. $tableau = array('le bon', 'la brute', 'le truand'); reset($tableau); while ( list($clef, $valeur) = each($tableau) ) { echo "$clef = $valeur <br />"; } /* 0 = le bon 1 = la brute 2 = le truand */ j) key key($tablo) Renvoie l'index de l'élément courant du tableau.
  • 16.
    Initiation au langagePHP Page 16 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 4.5. Tests sur les variables La fonction isset permet de tester si une variable est définie. La fonction unset permet de supprimer la variable, et de désallouer la mémoire utilisée. $a= "php"; echo isset($a); // => 1 (vrai) unset($a); echo isset($a); // => 0 (faux) La fonction gettype permet de connaître le type de la variable. Elle renvoie une chaîne : ``string'' ou ``integer'' ou ``double'' ou ``array'' ou ``object''. Note : Si la variable n'est pas définie, elle renvoie "string" $a= 12; echo gettype($a) ; // => "integer" $a= $a / 10; echo gettype($a) ; // => "double" On peut également tester un type particulier a l'aide des fonctions is_array, is_string, is_int,is_float, is_object . $a= 123; echo is_int($a); // (vrai) echo is_double($a); // (faux) echo is_string($a) // (faux) $a += 0.5;; echo is_float($a); // (vrai) Note: Les fonctions is_double et id_real sont équivalentes a is_float. Les fonctions is_long et is_integer sont équivalentes a is_int. 4.6. 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: define("Nom_de_la_variable", Valeur); Exemple 1 define(‘’auteur’’,’’Nabeledi’’); echo auteur; // affiche ‘Nabeledi’ Exemple 2 define(MY_YEAR,2010); echo MY_YEAR; // affiche 2010 Contrairement aux variables, les identificateurs de constantes (et aussi ceux de fonction) ne sont pas sensibles à la casse. 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 affectation n'est possible).
  • 17.
    Initiation au langagePHP Page 17 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 V. LES OPERATEURS 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: Les opérateurs arithmétiques Les opérateurs d'assignation Les opérateurs d'incrémentation Les opérateurs de comparaison Les opérateurs logiques (Les opérateurs bit-à-bit) (Les opérateurs de rotation de bit) 5.1. Les opérateurs arithmétiques Les opérateurs de calcul permettent de modifier mathématiquement la valeur d'une variable Opérateur Dénomination Effet Exple Résultat (pour x=7) + opérateur d'addition Ajoute deux valeurs $x+3 10 - opérateur de soustraction Soustrait deux valeurs $x-3 4 * opérateur de multiplication Multiplie deux valeurs $x*3 21 / plus: opérateur de division Divise deux valeurs $x/3 2.3333333 % opérateur modulo Donne le reste de la division entière entre 2 nombres $x%3 1 5.2. Les opérateurs d'assignation L'opérateur d'assignation le plus simple est le signe "=". Le premier réflexe est de penser que ce signe veut dire "égal à". Ce n'est pas le cas. Il signifie que l'opérande de gauche se voit affecter la valeur de l'expression qui est à droite du signe égal. La valeur d'une expression d'assignation est la valeur assignée. Par exemple, la valeur de l'expression '$a = 3' est la valeur 3. Cela permet d'utiliser des astuces telles que : Exemple <?php $b = 4 ; $a = $b + 5; // $b vaut 4 et $a est maintenant égal à 9 ?> En plus du simple opérateur d'assignation, il existe des "opérateurs combinés" pour tous les opérateurs arithmétiques et pour les opérateurs sur les chaînes de caractères. Cela permet d'utiliser la valeur d'une variable dans une expression et d'affecter le résultat de cette expression à cette variable. Exemple
  • 18.
    Initiation au langagePHP Page 18 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 <?php $a = 3; $a += 5; // affecte la valeur 8 à la variable $a. // correspond à l'instruction '$a = $a + 5'); $b = "Bonjour "; $b .= " tout le monde!"; // affecte la valeur "Bonjour tout le monde!" à la variable $b // identique à $b = $b." tout le monde!"; ?> Ces opérateurs permettent de simplifier des opérations telles que ajouter une valeur dans une variable et stocker le résultat dans la variable. Opérateur Effet = Affecte la valeur de droite à la variable de gauche += addition deux valeurs et stocke le résultat dans la variable (à gauche) - = soustrait deux valeurs et stocke le résultat dans la variable *= multiplie deux valeurs et stocke le résultat dans la variable /= divise deux valeurs et stocke le résultat dans la variable %= donne le reste de la division deux valeurs et stocke le résultat dans la variable |= Effectue un OU logique entre deux valeurs et stocke le résultat dans la variable ^= Effectue un OU exclusif entre deux valeurs et stocke le résultat dans la variable &= Effectue un Et logique entre deux valeurs et stocke le résultat dans la variable .= Concatène deux chaînes et stocke le résultat dans la variable 5.3. Les opérateurs d'incrémentation / Décrémentation Ce type d'opérateur permet de facilement augmenter ou diminuer d'une unité une variable. Ces opérateurs sont très utiles pour des structures telles que des boucles, qui ont besoin d'un compteur (variable qui augmente de un en un). Un opérateur de type $x++ permet de remplacer des notations lourdes telles que $x=$x+1 ou bien $x+=1 Exemple Nom Résultat ++$a Pré-incrémente Incrémente $a de 1, puis retourne $a. $a++ Post-incrémente Retourne $a, puis l'incrémente de 1. --$a Pré-décrémente Décrémente $a de 1, puis retourne $a. $a-- Post-décrémente Retourne $a, puis décrémente $a de 1. Exemple <?php //Post-incrémentation $a = 5; echo $a++ . "<br>n"; // la valeur de a est :5 echo $a . "<br>n"; // la valeur de a est :6 //Pré-incrémentation $a = 5; echo ++$a . "<br>n"; // la valeur de a est :6
  • 19.
    Initiation au langagePHP Page 19 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 echo $a . "<br>n"; // la valeur de a est :6 //Post-décrémentation $a = 5; echo $a-- . "<br>n"; // la valeur de a est :5 echo $a . "<br>n"; // la valeur de a est :4 //Pré-décrémentation $a = 5; echo --$a. "<br>n" ; // la valeur de a est :4 echo $a . "<br>n"; // la valeur de a est :4 ?> 5.4. Les opérateurs de comparaison Ce type d’poperateur permet de faire ds comparaiasons Exemple Nom Résultat $a == $b Egal Vrai si $a est égal à $b. $a === $b Identique Vrai si $a est égal à $b et qu'ils sont de même type (PHP 4 seulement). $a != $b Différent Vrai si $a est différent de $b. $a <> $b Différent Vrai si $a est différent de $b. $a < $b Plus petit que Vrai si $a est plus petit strictement que $b. $a > $b Plus grand Vrai si $a est plus grand strictement que $b. $a <= $b Inférieur ou égal Vrai si $a est plus petit ou égal à $b. $a >= $b Supérieur ou égal Vrai si $a est plus grand ou égal à $b. Un autre opérateur conditionnel est l'opérateur ternaire (":?"), qui fonctionne comme en langage C. Exemple <?php // Exemple d'utilisation pour l'opérateur ternaire $action = (empty($_POST['action'])) ? 'default' : $_POST['action']; // L'expression ci-dessus est identique à if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; } ?> L'expression (expr1) ? (expr2) : (expr3) renvoie la valeur de l'expression expr2 si l'expression expr1 est vraie, et l'expression expr3 si l'expression expr1 est fausse. 5.5. Les opérateurs logiques (booléens) Ce type d'opérateur permet de vérifier si plusieurs conditions sont vraies: Exemple Nom Portée Résultat $a and $b ET (And) ET logique Vrai si $a ET $b sont vrais. $a or $b OU (Or) OU logique Vrai si $a OU $b est vrai
  • 20.
    Initiation au langagePHP Page 20 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 $a xor $b XOR (Xor) OU exclusif Vrai si $a OU $b est vrai, mais pas les deux en même temps. ! $a NON (Not) NON logique Vrai si $a est faux. $a && $b ET (And) ET logique Vrai si $a ET $b sont vrais. $a || $b OU (Or) OU logique Vrai si $a OU $b est vrai. 5.6. (Les opérateurs bit-à-bit) Si vous ne comprenez pas ces opérateurs cela n'est pas important, vous n'en aurez probablement pas besoin. 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. Opérateur Nom Effet Syntaxe Résultat & ET bit-à-bit Retourne 1 si les deux bits de même poids sont à 1 9 & 12 (1001 & 1100) 8 (1000) | OU exclusif Retourne 1 si l'un ou l'autre des deux bits de même poids est à 1 (ou les deux) 9 | 12 (1001 | 1100) 13 (1101) ^ OU bit-à-bit Retourne 1 si l'un des deux bits de même poids est à 1 (mais pas les deux) 9 ^ 12 (1001 ^ 1100) 5 (0101) ~ Complément (NON) Retourne 1 si le bit est à 0 (et inversement) ~9 (~1001) 6 (0110) Exemple <?php echo 12 ^ 9; // Affiche '5' ?> 5.7. (Les opérateurs de rotation de bit) Si vous ne comprenez pas ces opérateurs cela n'est pas important, vous n'en aurez probablement pas l'utilité 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 rotations 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.
  • 21.
    Initiation au langagePHP Page 21 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Opérateur Nom Effet Syntaxe Résultat << Rotation à gauche Décale les bits vers la gauche (multiplie par 2 à chaque décalage). Les zéros qui sortent à gauche sont perdus, tandis que des zéros sont insérés à droite 6 << 1 (110 << 1) 12 (1100) >> Rotation à droite avec conservation du signe Décale les bits vers la droite (divise par 2 à chaque décalage). Les zéros qui sortent à droite sont perdus, tandis que le bit non-nul de poids plus fort est recopié à gauche 6 >> 1 (0110 >> 1) 3 (0011) 5.8. Autres opérateurs Les opérateurs ne peuvent pas être classés dans une catégorie spécifique mais ils ont tout de même chacun leur importance! Opérateur Nom Effet Syntaxe Résultat . Concaténation Joint deux chaînes bout à bout "Bonjour"."Au revoir" "BonjourAu revoir" $ Référencement de variable Permet de définir une variable $MaVariable = 2; à Propriété d'un objet Permet d'accéder aux données membres d'une classe $MonObjetàPropr iete 5.9. Les priorités Lorsque l'on associe plusieurs opérateurs, il faut que l'interprêteur PHP sache dans quel ordre les traiter. La priorité des opérateurs spécifie l'ordre dans lequel les valeurs doivent être analysées. Par exemple, dans l'expression 1 + 5 * 3, le résultat est 16 et non 18, car la multiplication ("*") a une priorité supérieure par rapport à l'addition ("+"). Le tableau suivant dresse une liste de la priorité des différents opérateurs dans un ordre croissant de priorité. Précédence des opérateurs Associativité Opérateurs Gauche , Gauche or Gauche xor Gauche and Droite print Droite = += -= *= /= .= %= &= |= ^= <<= >>= Gauche ? : Gauche || Gauche && Gauche | Gauche ^ Gauche & Non-associatif == != === !==
  • 22.
    Initiation au langagePHP Page 22 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Non-associatif < <= > >= Gauche << >> Gauche + - . gauche * / % droite ! ~ ++ -- (int) (float) (string) (array) (object) @ droite [ Non-associatif new Bien que ! soit prioritaire sur =, PHP va tout de même exécuter des expressions comme : if (!$a = ntic()). Dans cette situation, le résultat de ntic() sera placé dans la variable $a.
  • 23.
    Initiation au langagePHP Page 23 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 VI. STRUCTURES CONDITIONNELLES On appelle structure conditionnelle 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, parle alors de structures de boucle 6.1. 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... 6.2. Les primitives de choix 6.2.1. 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 une condition est réalisée. La syntaxe de cette expression est la suivante: if (condition réalisée) { liste d'instructions } 6.2.2. L'instruction if ... else L'instruction if dans sa forme basique ne permet de tester qu'une condition, or la plupart du temps on aimerait pouvoir choisir les instructions à exécuter en cas de non réalisation de la condition... L'expression if ... else permet d'exécuter une autre série d'instruction en cas de non-réalisation de la condition. La syntaxe de cette expression est la suivante: if (condition réalisée) { liste d'instructions } La condition doit être entre des parenthèses Il est possible de définir plusieurs conditions à remplir avec les opérateurs ET et OU (&& et ||) par exemple l'instruction suivante teste si les deux conditions sont vraies : if ((condition1)&&(condition2)) L'instruction ci-dessous exécutera les instructions si l'une ou l'autre des deux conditions est vraie : if ((condition1)||(condition2)) S’il n'y a qu'une instruction, les accolades ne sont pas nécessaires...
  • 24.
    Initiation au langagePHP Page 24 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 else { autre série d'instructions } 6.3. L'instruction if ... elseif ... else L'instruction if ... else ne permet de tester qu'une condition, or il est parfois nécessaire de tester plusieurs conditions de façon exclusive, c'est-à-dire que sur toutes les conditions une seule sera réalisée ... L'expression if ... elseif ... else permet d'enchaîner une série d'instructions et évite d'avoir à imbriquer des instructions if. La syntaxe de cette expression est la suivante: if (condition réalisée) { liste d'instructions } elseif (autre condition réalisée) { autre série d'instructions } ... else (dernière condition réalisée) { série d'instructions } Exemple <?php if ($a > $b) { print "a est plus grand que b"; } elseif ($a == $b) { print "a est égal à b"; } else { print "a est plus petit que b"; } ?> Une façon plus courte de faire un test (opérateur ternaire) Il est possible de faire un test avec une structure beaucoup moins lourde grâce à la structure suivante, appelée opérateur ternaire: (condition) ? instruction si vrai : instruction si faux La condition doit être entre des parenthèses Lorsque la condition est vraie, l'instruction de gauche est exécutée Lorsque la condition est fausse, l'instruction de droite est exécutée 6.3.1. L'instruction switch
  • 25.
    Initiation au langagePHP Page 25 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 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 Valeur2: 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'instructions qui suit celui-ci est exécutée. 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. Exemple 1 Cet exemple donne deux manières différentes d'écrire la même chose, l'une en utilisant une séries de if, et l'autre en utilisant l'instruction switch: <?php if ($i == 0) { print "i égale 0"; } if ($i == 1) { print "i égale 1"; } if ($i == 2) { print "i égale 2"; } switch ($i) { case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break; } ?>
  • 26.
    Initiation au langagePHP Page 26 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Exemple 2 <?php switch ($i) { case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break; default: print "i n'est ni égal à 2, ni à 1, ni à 0."; } ?> N'oubliez pas d'insérer des instructions break après chaque test, ce genre d'oubli est difficile à détecter car aucune erreur n'est signalée... 6.4. 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. 6.4.1. 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 } Exemple: for ($i=1; $i<6; $i++) { echo "$i<br>"; /* Cette boucle affiche 5 fois la valeur de $i, c'est-à-dire 1
  • 27.
    Initiation au langagePHP Page 27 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 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 PHP autorise la déclaration de la variable de boucle dans l'instruction for elle-même! for( [initialisations] ; [test sortie] ; [faire a chaque fois] ) il faudra toujours vérifier que la boucle a bien une condition de sortie (i.e le compteur s'incrémente correctement) une instruction echo 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: for($i=0;$i<10;$i++) exécute 10 fois la boucle ($i de 0 à 9) for($i=0;$i<=10;$i++) exécute 11 fois la boucle ($i de 0 à 10) for($i=1;$i<10;$i++) exécute 9 fois la boucle ($i de 1 à 9) for($i=1;$i<=10;$i++) exécute 10 fois la boucle ($i de 1 à 10) 6.4.2. 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 } Exemple $i = 1; while ($i <= 10) { print $i++; /* La valeur affiche est $i avant l'incrémentation (post-incrémentation) */ } 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! 6.4.3. Saut inconditionnel Il peut être nécessaire de faire sauter à la boucle une ou plusieurs valeurs sans pour autant mettre fin à celle-ci.
  • 28.
    Initiation au langagePHP Page 28 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 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) { echo "Division par zéro!"; continue; } $a = 1/($x-7); echo "$a<br>"; $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) { echo "division par 0 <br>"; $x++; continue; } $a = 1/($x-7); echo "$a<br>"; $x++; } 6.4.4. Arrêt inconditionnel A l'inverse, il peut être voulu d'arrêter prématurément la boucle, pour une autre condition 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) { echo "division par 0"; break;
  • 29.
    Initiation au langagePHP Page 29 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 } echo "1/$a<br>"; } 6.4.5. Arrêt d'exécution du script PHP autorise l'utilisation de la commande exit ou la fonction exit(), qui permet d'interrompre totalement l'interprétation du script, ce qui signifie que le serveur n'envoie plus d'informations au navigateur: le script est figé dans son état actuel. Cette instruction est particulièrement utile lors de l'apparition d'erreur!
  • 30.
    Initiation au langagePHP Page 30 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 VII.LA NOTION DE FONCTION On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel 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...). Il n'y a pas de distinction fonctions / procédures en PHP 7.1. La déclaration d'une fonction 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: function Nom_De_La_Fonction(argument1, argument2, ...) { liste d'instructions } Le nom de la fonction suit les mêmes règles que les noms de variables: Le nom doit commencer par une lettre un nom de fonction peut comporter des lettres, des chiffres et les caractères _ et & (les espaces ne sont pas autorisés!) 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 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! 7.2. 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(); Le point virgule signifie la fin d'une instruction et permet à l'interpréteur de distinguer les différents blocs d'instructions
  • 31.
    Initiation au langagePHP Page 31 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 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); 7.2.1. Renvoi d'une valeur par une fonction La fonction peut renvoyer une valeur (et donc se terminer) grâce au mot-clé return. Lorsque l'instruction return est rencontrée, la fonction évalue la valeur qui la suit, puis la renvoie au programme appelant (programme à partir duquel la fonction a été appelée). Une fonction peut contenir plusieurs instructions return, ce sera toutefois la première instruction return rencontrée qui provoquera la fin de la fonction et le renvoi de la valeur qui la suit. La syntaxe de l'instruction return est simple: return valeur_ou_variable; 7.2.2. Les arguments d'une fonction Il est possible de passer des arguments à une fonction, c'est-à-dire lui fournir une valeur ou le nom d'une variable afin que la fonction puisse effectuer des opérations sur ces arguments ou bien grâce à ces arguments. Le passage d'arguments à une fonction se fait au moyen d'une liste d'arguments (séparés par des virgules) entre parenthèses suivant immédiatement le nom de la fonction. Les arguments peuvent être de simples variables, mais aussi des tableaux ou des objets. A noter qu'il est possible de donner une valeur par défaut à ces arguments en faisant suivre le nom de la variable par le signe "=" puis la valeur que l'on affecte par défaut à la variable. Lorsque vous voulez utiliser un argument dans le corps de la fonction en tant que variable, celui-ci doit être précédé par le signe $. <? function dire_texte($qui, $texte = 'Bonjour') { if(empty($qui)){ // $qui est vide, on retourne faux return false; } Else { echo "$texte $qui"; // on affiche le texte return true; // fonction exécutée avec succès } } ?> Ainsi cette fonction peut être appelée de deux façons différentes: <? // Passage des deux paramètres dire_texte("cher phpeur", "Bienvenue"); // affiche "Bienvenue cher phpeur" // Utilisation de la valeur par défaut du deuxième paramètre dire_texte("cher phpeur"); // affiche "Bonjour cher phpeur" ?>
  • 32.
    Initiation au langagePHP Page 32 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 7.3. Portée (visibilité) des variables Voyons maintenant un caractère propre à beaucoup de langages de programmation fonctionnels: la portée des variables. En PHP, jusqu'à présent, lorsque vous déclariez une variable dans votre script, vous aviez l'habitude d'accéder à cette variable dans tout le reste de votre page. En effet, d'après le code suivant : <?php $toto = 5; ?> $toto est une variable qui sera accessible par votre script PHP une fois sa déclaration faite, c'est-à- dire juste après l'instruction $toto = 5. Vous savez également, qu'une variable déclarée dans le corps d'une fonction n'est accessible que dans le corps de cette même fonction. Exemple : <?php $toto = 5; function ma_fonction () { echo $toto; } ma_fonction(); ?> Dans ce cas, l'exécution de ce code PHP n'affichera rien vu que $toto (contenu dans le code de la fonction ma_fonction()) n'a strictement aucun rapport avec la variable $toto contenu dans le script courant. On appellera la variable $toto (celle contenue dans le code de la fonction) comme étant une variable locale à la fonction ma_fonction() (elle n'est pas globale au script). 7.3.1. Le mot clé global Sachez qu'il est possible d'utiliser dans le code même de vos fonctions des variables que vous avez déclarées dans votre script courant à l'aide du mot clé global. Reprenons notre exemple précédent : <?php $toto = 5; function ma_fonction () { global $toto; echo $toto; } ma_fonction(); // Cet exemple affichera :5 ?> En effet, dans ce script, nous déclarons la variable (qui était jusque là locale) $toto comme étant une variable globale du script. PHP sait alors qu'il doit récupérer la valeur de cette variable dans le script courant.
  • 33.
    Initiation au langagePHP Page 33 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Il n'y a aucune limite au nombre de variables globales qui peuvent être manipulées par une fonction. Vous pouvez également effectuer la même opération en utilisant le tableau associatif $_GLOBALS. Le code suivant donnera le même résultat que le code précédent : <?php $toto = 5; function ma_fonction () { echo $_GLOBALS["toto"]; } ma_fonction(); ?> 7.3.2. Le mot clé static Les amateurs de programmation par objets doivent bien connaître ce terme de static . Une variable dite static est une variable locale à une fonction mais qui a la particularité de se souvenir de sa valeur. Prenons comme exemple le code suivant : <?php function ma_fonction () { $toto = 1; echo $toto; $toto++; } for($i=1;$i<=50;$i++) { ma_fonction(); } ?> Si je lance cette fonction 50 fois, vous allez tous penser que cette fonction affichera 50 fois la valeur 1, et vous aurez raison : Dans ce cas, l'incrémentation ne sert à rien puisque lorsque l'on a fini d'exécuter cette fonction PHP "perd connaissance" de la valeur de la variable $toto. En revanche, si on déclare la variable $toto comme étant une variable statique (grâce au mot clé static), le comportement de cette fonction sera totalement différent. En effet, vu que $toto est statique, PHP se souviendra de sa valeur lors de la dernière exécution de la fonction. Avec le code suivant : <?php function ma_fonction () { static $toto = 1; echo $toto; $toto++; } for($i=1;$i<=50;$i++) {
  • 34.
    Initiation au langagePHP Page 34 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 ma_fonction(); } ?> Si je lance 50 fois ma fonction, et bien nous verrons sur l'écran, la suite des nombres entre 1 et 50. Explication : à chaque appel, PHP se souvient de la précédente valeur de la variable $toto (parce qu'elle est static) et notre fonction incrémente alors cette valeur pour ensuite l'afficher. 7.3.3. Le passage par référence Dans nos exemples précédents, vous savez que grâce au mot clé global, les fonctions pouvaient récupérer les valeurs des variables globales. Sachez qu'il est également possible de modifier la valeur d'une variable d'un script (une variable globale) grâce à une fonction en utilisant un passage de variable par référence. Le passage par référence se caractérise par l'utilisation d'un & avant le nom de votre variable dans les arguments de votre fonction. Exemple 1: <?php $toto = 5; function ma_fonction ($var) { $var++; } ma_fonction(&$toto); echo $toto; // Ce script affichera : 6 ?> Pour les personnes qui ont fait du C, le passage par référence s'assimile à la notion de pointeur. En passant une variable par référence à une fonction, nous ne passons pas en fait la variable en elle-même (la preuve : notre fonction utilise une variable $var alors qu'elle modifie tout de même la valeur de la variable $toto du script courant) mais une référence vers la zone mémoire où est stockée la valeur de notre variable $toto. Notre fonction modifie alors directement cette zone mémoire en lui donnant une nouvelle valeur, ce qui explique que dans le script courant, et bien la valeur de $toto a changé. 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... Exemple 2: <? function dire_texte($qui, &$texte) { $texte = "Bienvenue $qui"; } $chaine = "Bonjour "; dire_texte("cher phpeur",$chaine); echo $chaine; // affiche "Bienvenue cher phpeur" ?>
  • 35.
    Initiation au langagePHP Page 35 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 7.4. Retourner plusieurs variables Lorsque vous souhaitez qu'une fonction retourne plusieurs valeurs, le plus simple est d'utiliser un tableau. <? function nom_fonction() { ..... return array( $variable1, $variable2, $variable3 ); // on retourne les valeurs voulues dans un tableau } $retour = nom_fonction(); echo "$retour[0] - $retour[1] - $retour[2]"; ?> <?PHP function calcul($a, $b) { $add = $a+$b; $sous = $a-$b; $multi = $a*$b; $div = $a/$b; return array($add, $sous, $multi, $div); } list($add, $sous, $multi, $div) = calcul(30, 6); // affiche le resultat echo $add . '<br />'; echo $sous . '<br />'; echo $multi . '<br />'; echo $div . '<br> /'; ?> 7.5. 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 ?>
  • 36.
    Initiation au langagePHP Page 36 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 7.6. Les fonctions standards d’affichage PHP 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'une 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 et printf 7.6.1. La fonction echo La fonction echo permet d'envoyer au navigateur la chaîne de caractères (délimitée par des guillemets ou des cotes simples) 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. Prenons un autre exemple où nous allons afficher la date et l'heure du jour. On a le code suivant : <? $date_du_jour = date ("d-m-Y"); $heure_courante = date ("H:i"); echo 'Nous sommes le : '; echo $date_du_jour; echo ' Et il est : '; echo $heure_courante; //affiche: Nous sommes le 25-10-2005 Et il est 11:59 ?> Dans ce cas, nous venons d'utiliser la fonction date() qui nous permet d'afficher la date du jour ainsi que l'heure courante (en fait, la date du serveur). Dans un premier temps, nous avons affecté à la variable $date_du_jour le contenu que retourne la fonction date() munie des
  • 37.
    Initiation au langagePHP Page 37 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 paramètres "d-m-Y", soit 27-09-2005, puis nous avons affecté à la variable $heure_courante le contenu que retourne la fonction date() munie des paramètres "H:i", soit 11:59. Voici la liste des paramètres possibles pour la fonction date() : - a : "am" (matin) ou "pm" (après-midi) - A : "AM" (matin) ou "PM" (après-midi) - d : Jour du mois, sur deux chiffres (éventuellement avec un zéros) : "01" à "31" - D : Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi) - F : Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier) - h : Heure, au format 12h, "01" à "12" - H : heure, au format 24h, "00" à "23" - g : Heure, au format 12h sans les zéros initiaux, "1" à "12" - G : Heure, au format 24h sans les zéros initiaux, "0" à "23" - i : Minutes; "00" à "59" - j : Jour du mois sans les zéros initiaux: "1" à "31" - l : Jour de la semaine, textuel, version longue; en anglais, i.e. "Friday" (pour Vendredi) - L : Booléen pour savoir si l'année est bissextile ("1") ou pas ("0") - m : Mois; i.e. "01" à "12" - n : Mois sans les zéros initiaux; i.e. "1" à "12" - M : Mois, en trois lettres (et en anglais) : par exemple "Jan" (pour Janvier) - s : Secondes; i.e. "00" à "59" - S : Suffixe ordinal d'un nom - w : Jour de la semaine au format numérique 0 (pour dimanche) à 6 (pour samedi) 7.6.2. La fonction print La fonction print est similaire à la fonction echo . La syntaxe de la fonction print est la suivante: 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); // affiche le resultat de (1+2)x87 les parenthèses ne sont pas obligatoires mais question de lisibilité 7.6.3. 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 formatée); Une chaîne formaté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
  • 38.
    Initiation au langagePHP Page 38 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 la fonction printf. Les valeurs à insérer dans la chaîne formatées sont séparées par des virgules et doivent apparaître dans l'ordre où les codes apparaissent dans la chaîne formaté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);
  • 39.
    Initiation au langagePHP Page 39 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 VIII.FONCTION MAIL 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. 8.1. La fonction mail() En PHP il existe une fonction très simple qui permet d'envoyer un email. Voilà sa syntaxe Entier mail(chaîne email_destinataire, chaîne Sujet, chaîne corps_du_message, chaîne options); Le dernier champ est facultatif, on en parlera juste après. Dans un premier temps nous allons envoyer un email de base. Voilà le nouveau code du fichier traitant les données envoyées par le formulaire précédant : <? mail( "webmaster@ntic.ci", "Commentaire sur le site ", "$nom a laissé un commentaire à propos de www.ntic.ci: nn$texte" ); ?> 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() 8.2. Les options / en-têtes Le champ options de la fonction mail permet d'ajouter une en-tête au message que l'on envoie. On peut par exemple y mettre la date, le logiciel utilisé pour envoyer l'email ou encore l'adresse de retour... Voilà un exemple d'en-tête à utiliser lors d'un envoi de mail : $from_email = "contact@ntic.ci"; $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( "webmaster@ntic.ci", "Commentaire sur le site", "$nom a laissé un commentaire à propos de www.ntic.ci: nn$texte",
  • 40.
    Initiation au langagePHP Page 40 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 $entetemail ); 8.3. La fonction email() La fonction email() remplace parfois la fonction mail() chez 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(chaîne compte,chaîne destinataire,chaîne titre,chaîne message[,options]);
  • 41.
    Initiation au langagePHP Page 41 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 IX.NOTION DE VARIABLES D'ENVIRONNEMENT 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,... 9.1. Les variables d'environnement On peut donc classer les variables d'environnement en deux catégories: Les variables d'environnement dépendant du client Les variables d'environnement dépendant du serveur 9.1.1. Les variables d'environnement dépendant du client Variable d'environnement Description $AUTH_TYPE Il s'agit de la méthode d'authentification qui a été utilisée par le client pour accéder au script PHP $COMSPEC Location de l'interpréteur de commandes sur la machine (Sous Windows) $CONTENT_TYPE Type de données contenu présent dans le corps de la requête. Il s'agit du type MIME des données $DOCUMENT_ROOT Racine des documents sur le serveur $DOCUMENT_URI Adresse du script PHP en relatif (à partir de la racine du serveur) $HTTP_ACCEPT Types MIME reconnus par le serveur (séparés par des virgules) $HTTP_ACCEPT_ENCODING Types d'encodage que le serveur peut réaliser (gzip,deflate) $HTTP_ACCEPT_LANGUAGE Langue utilisée par le serveur (par défaut en-us) $HTTP_CONNECTION Type de connexion ouverte entre le client et le serveur (par exemple Keep-Alive) $HTTP_HOST Nom d'hôte de la machine du client (associée à l'adresse IP) $HTTP_REFERER URL de la page qui a appelé le script PHP $HTTP_USER_AGENT Cette variable permet d'avoir des informations sur le type de navigateur utilisé par le client, ainsi que son système d'exploitation. Voici quelques exemples de User-Agents: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT; TUCOWS Network) Mozilla/4.7 [en] (X11; I; Linux 2.2.14-15mdk i686) $LAST_MODIFIED Date et heure de dernière modification du fichier $PATH Il s'agit du chemin d'accès aux différents répertoires sur le serveur $PATH_INFO Il s'agit du chemin d'accès au script PHP en relatif (de la racine du serveur jusqu'au script PHP) $PHP_SELF Nom du script PHP $REDIRECT_STATUS Il s'agit de l'état de la redirection (echec ou succès) $REDIRECT_URL Il s'agit de l'URL vers laquelle le navigateur du client a été redirigé
  • 42.
    Initiation au langagePHP Page 42 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 $QUERY_STRING Il s'agit de la partie de l'URL (ayant servi à accéder au script PHP) située après le point d'interrogation. C'est de cette manière que sont transmises les données d'un formulaire dans le cas de la méthode GET $REMOTE_ADDR Cette variable contient l'adresse IP du client appelant le script CGI $REMOTE_PORT Cette variable permet de savoir le port sur lequel la requête HTTP a été envoyée au serveur $SCRIPT_FILENAME Chemin d'accès complet au script PHP Sous windows, il sera de la forme: c:/php/php.exe $SCRIPT_NAME Chemin d'accès relatif (par rapport au chemin d'accès à la racine web ($DOCUMENT_ROOT)) au script PHP 9.1.2. Les variables d'environnement dépendant du serveur Variable d'environnement Description $DATE_GMT Date actuelle au format GMT $DATE_LOCAL Date actuelle au format local $DOCUMENT_ROOT Racine des documents Web sur le serveur $GATEWAY_INTERFACE Version des spécifications CGI utilisées par le serveur $HTTP_HOST Nom de domaine du serveur $SERVER_ADDR Adresse IP du serveur $SERVER_ADMIN Adresse de l'administrateur du serveur $SERVER_NAME Nom donné au serveur en local $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 $SERVER_SOFTWARE Type (logiciel) du serveur web Pour un serveur Apache sous Unix: Apache/1.3.2 (Unix) PHP/3.0.5 Pour un serveur Apache sous Windows: Apache/1.3.2 (Win32) PHP/3.0.5 9.2. Affichage des variables d'environnement Il est possible de créer un script permettant de visualiser l'ensemble des variables d'environnement. La première façon consiste à utiliser la fonction phpinfo() qui affiche toute seule un tableau récapitulatif des paramètres du serveur et de l'intepréteur PHP, ainsi qu'un tableau des variables d'environnement <? 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"); ?>
  • 43.
    Initiation au langagePHP Page 43 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Enfin il est possible de définir des variables d'environnement : <? echo putenv("MA_VARIABLE=mavaleur"); ?>
  • 44.
    Initiation au langagePHP Page 44 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 X.LA GESTION DES FICHIERS AVEC PHP 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 paramètre aux fonctions spécialisées pour le manipuler. 10.1. 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 : entier fopen(chaine nomdufichier, chaine mode); Le mode indique le type d'opération qu'il sera possible d'effectuer sur le fichier après ouverture. Il s'agit d'une lettre (en réalité une chaîne de caractères) indiquant l'opération possible: r (comme read) indique une ouverture en lecture seulement w (comme write) indique une ouverture en écriture seulement (la fonction crée le fichier s'il n'existe pas) a (comme append) indique une ouverture en éciture seulement avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe pas) 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 R ouverture en lecture seulement W ouverture en écriture seulement (la fonction crée le fichier s'il n'existe pas) A ouverture en écriture seulement avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe pas) R+ ouverture en lecture et écriture W+ ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas) A+ ouverture en lecture et écriture avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe pas) Voici des exemples d'utilisations possibles de cette fonction: $fp = fopen("../fichier.txt","r"); //lecture $fp = fopen("http://www.cup.ci/fichier.txt","w"); //écriture depuis début du fichier $fp = fopen("http://www.cup.ci/fichier.txt","a"); //écriture depuis fin du fichier De plus, la fonction fopen permet d'ouvrir des fichiers présents sur le web grâce à leur URL. Voici un script permettant de récupérer le contenu d'une page d'un site site web: <? $fp = fopen("http://www.cup.ci/fichier.txt","r"); //lecture du fichier while (!feof($fp)) { //on parcourt toutes les lignes
  • 45.
    Initiation au langagePHP Page 45 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 $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.cup.ci/fichier.txt","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() 10.2. 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 entier fputs(entier Etat_du_fichier, chaine Sortie); La fonction fputs() renvoie le nombre de caractères effectivement écrits dans le fichier fgets() permettant de récupérer une ligne du fichier chaîne fgets(entier Etat_du_fichier, entier Longueur); 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, la chaîne 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)) { // On récupère une ligne $Ligne = fgets($fp,255); // On affiche la ligne echo $Ligne; // On stocke l'ensemble des lignes dans une variable
  • 46.
    Initiation au langagePHP Page 46 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 $Fichier .= $Ligne; } 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("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.ntic.ci/index.html","r"); //lecture du fichier while (!feof($fp)) { //on parcourt 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); ?> 10.3. Les tests de fichiers PHP fournit de nombreuses fonctions permettant de faire des tests sur les fichiers pour connaître leurs propriétés. Voici la liste des fonctions des test: is_dir() is_dir() permet de savoir si le fichier dont le nom est passé en paramètre correspond à un répertoire booléen is_dir(chaine Nom_du_fichier); La fonction is_dir() renvoie 1 si il s'agit d'un répertoire, 0 dans le cas contraire <? if (!is_dir("install")) { echo "Il ne s'agit pas d'un répertoire "; } else { echo "Il s'agit bien d'un répertoire "; } ?>
  • 47.
    Initiation au langagePHP Page 47 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 is_executable() Permet de savoir si le fichier dont le nom est passé en paramètre est exécutable booléen is_executable(chaine Nom_du_fichier); La fonction is_executable() renvoie 1 si le fichier est exécutable, 0 dans le cas contraire is_file() Permet de savoir si le fichier dont le nom est passé en paramètre ne correspond ni à un répertoire, ni à un lien symbolique booléen is_file(chaine Nom_du_fichier); La fonction is_file() renvoie 1 si il s'agit d'un fichier, 0 dans le cas contraire is_link() Permet de savoir si le fichier dont le nom est passé en paramètre correpond à un lien symbolique booléen is_link(chaine Nom_du_fichier); La fonction is_link() renvoie 1 si il s'agit d'un lien symbolique, 0 dans le cas contraire 10.4. Quelques fonctions de manipulation de fichiers basename -- Sépare le nom du fichier et le nom du dossier. chgrp -- Change le groupe propriétaire d'un fichier chmod -- Change le mode du fichier chown -- Change le groupe propriétaire du fichier clearstatcache -- Efface le cache de stat() copy -- Copie un fichier delete -- Effacer dirname -- Renvoie le nom du dossier disk_free_space -- Renvoie l'espace disque disponible dans le répertoire. disk_total_space -- Retourne la taille d'un dossier diskfreespace -- Alias de disk_free_space() fclose -- Ferme un fichier feof -- Teste la fin du fichier fflush -- Envoi tout le contenu généré dans un fichier fgetc -- Lit un caractère dans un fichier fgetcsv -- Renvoie la ligne courante et cherche les champs CSV fgets -- Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier. fgetss -- Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier et élimine les balises HTML file_exists -- Vérifie si un fichier existe file_get_contents -- Lit tout un fichier dans une chaîne file_put_contents -- Ecrit une chaîne dans un fichier file -- Lit le fichier et renvoie le résultat dans un tableau fileatime -- Renvoie la date à laquelle le fichier a été accédé pour la dernière fois. filectime -- Renvoie l'heure à laquelle l'inode a été accédé pour la dernière fois. filegroup -- Lire le nom du groupe fileinode -- Renvoie le numéro d'inode du fichier filemtime -- Renvoie la date de dernière modification du fichier. fileowner -- Renvoie le nom du propriétaire du fichier fileperms -- Renvoie les permissions affectées au fichier. filesize -- Renvoie la taille du fichier filetype -- Retourne le type de fichier flock -- Verrouille le fichier fnmatch -- Repère un fichier à partir d'un masque
  • 48.
    Initiation au langagePHP Page 48 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 fopen -- Ouverture d'un fichier ou d'une URL fpassthru -- Affiche le reste du fichier fputs -- Ecrit dans un fichier fread -- Lecture du fichier en mode binaire fscanf -- Analyse un fichier en fonction d'un format fseek -- Modifie le pointeur de fichier fstat -- Lit les informations sur un fichier à partir d'un pointeur de fichier ftell -- Renvoie la position du pointeur du fichier ftruncate -- Tronque un fichier fwrite -- Ecriture du fichier en mode binaire glob -- Recherche des chemins qui vérifient un masque is_dir -- Indique si le nom de fichier est un dossier is_executable -- Indique si le fichier est exécutable is_file -- Indique si le fichier est un véritable fichier. is_link -- Indique si le fichier est un lien symbolique. is_readable -- Indique si un fichier est autorisé en lecture is_uploaded_file -- Indique si le fichier a été téléchargé par HTTP POST is_writable -- Indique si un fichier est autorisé en écriture is_writeable -- Indique si un fichier est autorisé en écriture link -- Crée un lien linkinfo -- Renvoie les informations à propos d'un lien lstat -- Retourne les informations à propos d'un fichier ou d'un lien symbolique. mkdir -- Crée un dossier move_uploaded_file -- Déplace un fichier téléchargé parse_ini_file -- Traite un fichier de configuration pathinfo -- Retourne des informations sur un chemin système pclose -- Ferme un processus de pointeur de fichier popen -- Crée un processus de pointeur de fichier readfile -- Affiche un fichier readlink -- Renvoie le nom du fichier vers lequel pointe un lien symbolique realpath -- Retourne le chemin canonique absolu rename -- Renomme un fichier ou un dossier rewind -- Replace le pointeur de fichier au début rmdir -- Efface un dossier set_file_buffer -- Alias de stream_set_write_buffer() stat -- Renvoie les informations à propos d'un fichier symlink -- Crée un lien symbolique tempnam -- Crée un fichier avec un nom unique tmpfile -- Crée un fichier temporaire touch -- Modifie la date de modification et de dernier accès d'un fichier umask -- Change le "umask" courant unlink -- Efface un fichier
  • 49.
    Initiation au langagePHP Page 49 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 XI.LES EXPRESSIONS REGULIERES 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... 11.1. Construire une expression régulière Les expressions régulières permettent de rechercher des occurrences (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ère 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. "^debut": chaine qui commence par "debut" "fin$": chaine qui se termine par "fin" "^chaine$": chaine qui commence et se termine par "chaine" "abc": chaine contenant la chaine "abc" Les symboles *, + et ?, respectivement "zero ou plusieurs", "un ou plusieurs", "un ou aucun", permettent de donner une notions de nombre. "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. "abc{2}": chaine qui contient "ab" suivie de deux "c" ("abcc") "abc{2,}": chaine qui contient "ab" suivie de deux "c" ou plus ("abcc" etc..) "abc{2,4}": chaine qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" .. "abcccc") A noter que le premier nombre de la limite ("{0,2}", mais pas "{,2}") est obligatoire. Les symboles vu précedemment ('*', '+', and '?') sont équivalents à "{0,}", "{1,}", et "{0,1}". Les parenthèses ( ) permettent de représenter une séquence de caractères. "a(bc)*": chaine qui contient "a" suivie de zero "bc" ou plus La barre verticale | se comporte en tant qu'opérateur OU
  • 50.
    Initiation au langagePHP Page 50 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 "un|le": chaine qui contient "un" ou "le" "(un|le) chien": chaine qui contient "un chien" ou "le chien" "(a|b)*": chaine qui contient une suite de "a" ou de "b" Le point . indique n'importe quel caractère (une fois) "^.{3}$": chaine qui contient 3 caractères Les crochets [ ] définissent une liste de caractères autorisés (ou interdits). Le signe - permet quand à lui de définir un intervalle. Le caractère ^ après le premier crochet indique quand à lui une interdiction. "[abc]": chaine qui contient un "a", un "b", ou un "c" "[a-z]": chaine qui contient un caractère compris entre "a" et "z" "[^a-zA-Z]": chaine qui ne commence pas par une lettre Pour rechercher un caractère faisant partie des caractères spéciaux, il suffit de le faire précéder d'un antislash (sauf entre crochets) un antislash doit donc être doublé! En effet dans les crochets, chaque caractère représente ce qu'il est. Pour représenter un ] il faut le mettre en premier (ou après un ^ si c'est une interdiction), un - se met en premier ou en dernier. "[+?{}.]": chaine qui contient un de ces six caractères "[]-]": chaine qui contient le caractère "]" ou le caractère "-" Voici un tableau récapitulatif des caractères spéciaux utilisés dans les expressions régulières: Caractère Utilité [] Les crochets définissent une liste de caractères autorisés () Les parenthèses définissent un élément composé de l'expression régulière qu'elle contient {} Les accolades lorsqu'elles contiennent un ou plusieurs chiffres séaprés par des virgules représente le nombre de fois que l'élément précédant les accolades peut se reproduire (par exemple p{2,5} correspond à ppp, pppp ou ppppp - Un moins entre deux caractères dans une liste représente un intervalle (par exemple [a-d] représente [abcd]) . Le caractère point représente un caractère unique * Le caractère astérisque indique la répétition indéterminée de l'élément la précédant ? Le caractère "point d'interrogation indique la présence éventuelle de l'élément la précédant | 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 .. "
  • 51.
    Initiation au langagePHP Page 51 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 11.2. Les classes de caractères Il peut également être utile de vérifier si une chaîne contient des caractères d'un certain type (numérique, alphanumérique, ...) sans avoir à les énumérer. Pour cela les expressions régulières définissent des classes de caractères, dont la syntaxe est: [: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:]+$" 11.3. Les fonctions de manipulation d'expressions régulières PHP fournit quelques fonctions de bases permettant de manipuler des chaînes à l'aide d'expressions régulières. 11.3.1. Les fonctions ereg() et eregi() La fonction ereg() dont la signature est la suivante : Booleen ereg(chaine modele,chaine texte[,tableau occurences]) permet d'évaluer le texte passer en argument grâce au modèle (qui est une expression régulière) et stocke toutes les occurences dans un tableau passé optionnellement en paramètre. Lorsque la fonction trouve des occurences, elle renvoie true, sinon elle retourne false.
  • 52.
    Initiation au langagePHP Page 52 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 La fonction eregi() dont la signature est la suivante : Booleen eregi(chaine modele,chaine texte[,tableau occurences]) effectue le même travail que sa consoeur ereg(), à la différence près qu'elle n'est pas sensible à la casse (pas de différenciation minuscules/majuscules) . <? $fp = fopen("http://www.cup.ci/index.php","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 // $regs[0] renvoie toute la chaine fclose($fp); ?> Exemple Test si une adresse électronique est valide < ? $mail=$_POST[“mail”]; if(eregi("^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a- z]{2,4}$",$mail)) { ........ } ?> 11.3.2. Les fonctions ereg_replace() et eregi_replace() La fonction ereg_replace() dont la signature est la suivante : chaine ereg_replace(chaine modele,chaine remplacement,chaine texte) Permet de retourner la chaine texte passée en arguments avec les occurences trouvees remplacées par la chaine de remplacement. Pour utiliser les occurences correspondant au modele dans la chaine de remplacement, il suffit d'utiliser des parenthèses dans la chaine modele, puis de faire référence à ces éléments dans la chaine de remplacement en utilisant deux signes antislash suivi d'un numéro identifiant l'élément entre 0 et 9 (les numéros sont donnés par ordre d'imbriquement, puis de gauche à droite, le zéro représente la chaine entière). Le code suivant remplace Toto par <b>Toti Toto</b>... inutile mais formateur. $Texte = "Bienvenue a Toto dans le mondes des expressions régulières"; $Texte = ereg_replace("To(to)","<b>1ti 0</b>",$Texte); 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ériques commençant par http://par le même texte (sans le http://) entre balises HTML hypertexte...): $Texte = "Bienvenue sur http://www.cup.fr";
  • 53.
    Initiation au langagePHP Page 53 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 $Texte = ereg_replace("(http://)(([[:punct:]]|[[:alnum:]])*)","<a href="0">2</a>",$Texte); La fonction eregi_replace() dont la signature est la suivante : chaine eregi_replace(chaine modele,chaine remplacement,chaine texte) effectue le même travail que sa consoeur ereg_replace(), à la différence près qu'elle n'est pas sensible à la casse (pas de différenciation minuscules/majuscules). 11.3.3. La fonction split() La fonction split() possède la syntaxe suivante: tableau split (chaîne expression, chaîne texte [, entier limite]) La fonction split() retourne un tableau à partir d'une chaine et d'une expression régulière. La limite, optionnelle permet de limiter la taille du tableau retourné. Dans ce cas le dernier élément du tableau contient le reste de la chaine. Si une erreur se produit, split retourne 0. <? // 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 ?> 11.3.4. La fonction sql_regcase() La fonction sql_regcase() possède la syntaxe suivante: chaine sql_regcase (chaine texte) Elle retourne une expression régulière qui représente la chaine passée en paramètre sans tenir compte de la case. Chaque caractère de la chaine est representé entre crochets, avec deux caractères à l'intérieur un en majuscule et l'autre en minuscule, ou le cas échéant deux fois le même caractères. Aucune explication ne vaut un bon exemple ;) <? 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 ?>
  • 54.
    Initiation au langagePHP Page 54 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 XII.CREATION D’IMAGES 12.1. 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, ...). 12.2. Comment utiliser ces fonctions 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.php">). 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. booléen imagegif(entier image, chaîne NomDuFichier); La fonction imagegif() ne fonctionne pas avec PHP4 Notez que vous pouvez utiliser imagepng() et imagejpg()! La fonction imagecreate() permet de créer un identifiant pour une image vierge possèdant les dimensions indiquées en paramètres. entier imagecreate(entier largeur,entier hauteur); La fonction imagecreatefromgif() permet de créer un identifiant pour l'image créée à partir d'une image GIF existant sur le disque, en passant en paramètre le nom du fichier. entier createimagefromgif(chaîne NomDuFichier); Enfin la fonction imagedestroy() permet de vider la mémoire allouée à l'image dont on a passé l'identifiant en paramètre. booléen imagedestroy(entier image);
  • 55.
    Initiation au langagePHP Page 55 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Voilà donc un script minimal (et inutile) créant une image PHP à partir d'une image présente sur le disque: <?php headers("Content-Type: image/gif"); $image = imagecreatefromgif("toto.gif"); imagegif($image); ?> 12.3. L'allocation de couleur La majeure partie des fonctions de la librairie GD permet de créer une image, 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). entier imagecolorallocate(entier image, entier rouge,entier vert, entier bleu); Voici quelques exemples d'allocation de couleurs avec cette fonction (avec les composantes en hexadécimal ou en entier): $noir = imagecolorallocate($image,0,0,0); $rouge = imagecolorallocate($image,255,0,0); $vert = imagecolorallocate($image,0,0xFF,0); 12.4. 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 imagearc(entier image,entier x,entier y,entier largeur,entier hauteur,entier début,entier fin,entier couleur) Crée un arc de centre (x,y) dont la largeur et la hauteur sont en pixels. Début et fin représentent les angles de début et de fin (le degré 0 est à trois heures) en tournant dans le sens des aiguilles d'un montre imagedashedline(entier image,entier Trace un trait pointillé entre les points
  • 56.
    Initiation au langagePHP Page 56 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 xdebut,entier ydebut,entier xfin,entier yfin,entier couleur) (xdebut,ydebut) et (xfin,yfin) de la couleur spécifiée imagefilledpolygon(entier image,tableau coordonnees,entier nonbre,entier couleur) Crée un polygone de la couleur spécifiée, dont les points sont stockes dans un tableau de valeurs (x,y). Le nombre de points du tableau à utiliser est spécifié en paramètre nombre imagefilledrectangle(entier image,entier xgauchehaut,entier ygauchehaut,entier xdroitebas,entier ydroitebas,entier couleur) Crée un rectangle rempli avec la couleur spécifiée, et dont les coins supérieur gauche et inférieur droit sont spécifiés en argument imageline(entier image,entier xdebut,entier ydebut,entier xfin,entier yfin,entier couleur) Trace un trait entre les points (xdebut,ydebut) et (xfin,yfin) de la couleur spécifiée imagepolygon(entier image,tableau coordonnees,entier nonbre,entier couleur) Crée un polygone non rempli dont le contour est de la couleur spécifiée, dont les points sont stockes dans un tableau de valeurs (x,y). Le nombre de points du tableau à utiliser est spécifié en paramètre nombre imagerectangle(entier image,entier xgauchehaut,entier ygauchehaut,entier xdroitebas,entier ydroitebas,entier couleur) Crée un rectangle nom rempli dont le contour est de la couleur spécifiée, et dont les coins supérieur gauche et inférieur droit sont spécifiés en argument 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); ?> Deux fonctions supplémentaires vous permettront de remplir une zone avec une couleur: Fonction Description imagefill(entier image,entier x,entier y,entier couleur) Remplit une zone d'une même couleur par la couleur spécifiée en argument, en commençant le remplissage à partir du point indiqué en paramètre imagetoborder(entier image,entier x,entier y,entier couleurbordure,entier couleur) Remplit une zone délimitée par une bordure d'une couleur, par la couleur spécifiée en argument, en commençant le remplissage à partir du point indiqué en paramètre 12.5. Les chaînes de caractères PHP permet d'autre part de dessiner des chaînes de caractères dans une image grâce à une grande variété de fonctions dédiées. Cela autorise ainsi la création de légendes ou de boutons dynamiques, en fonction du texte passé en paramètre, stocké dans un fichier, ou bien dans une base de données. La principale fonction permettant de créer des chaînes de caractères dans l'image est imagestring() :
  • 57.
    Initiation au langagePHP Page 57 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 booléen imagestring(entier image,entier police,entier x,entier y,chaine texte,entier couleur); Cette fonction permet de créer une chaîne de caractères contenant le texte passé en argument à la position spécifiée par les arguments (x,y) avec la police indiquée. En réalité PHP propose 5 polices par défaut numérotées de 0 à 5, mais il est possible de spécifier une police p[ersonnalisée grâce à la fonction imageloadfont() : Entier imageloadfont(chaîne Nom_du_Fichier); Le format du fichier de police passé en paramètre peut varier selon le système sur lequel PHP fonctionne... Enfin, les fonctions imagefontwidth() et imagefontheight() renvoient la largeur et la hauteur de la police passée en unique paramètre. Ainsi, il est facile de connaître le nombre de pixels que va occuper la chaîne entière: $largeur = imagefontwidth($police) * strlen($text); $hauteur = imagefontheight($police); Voici un tableau présentant les fonctions de création de chaînes de caractères graphiques: Fonction Description booléen imagechar(entier image,entier police,entier x,entier y,chaîne caractere,entier couleur) Crée un caractère à l'emplacement (x,y) (position de l'angle supérieur gauche du caractère). La police du caractère peut-être choisie parmi les polices par défaut (1 à 5) ou bien une police personnalisé que vous avez ouvert précédemment avec imageloadfont() booléen imagecharup(entier image,entier police,entier x,entier y,chaîne caractere,entier couleur) Crée un caractère orienté à l'horizontale (rotation de 90°) à l'emplacement (x,y) (position de l'angle supérieur gauche du caractère). La police du caractère peut-être choisie parmi les polices par défaut (1 à 5) ou bien une police personnalisé que vous avez ouvert précédemment avec imageloadfont() entier imagefontheight(entier police) retourne la hauteur de la police utilisée entier imagefontwidth(entier police) retourne la largeur de la police utilisée entier imageloadfont(chaîne nom_du_fichier) Charge la police dont le nom est passé en argument et retourne son identifiant booléen imagestring(entier image,entier police,entier x,entier y,chaîne texte,entier couleur) Crée une chaîne de caractères à l'emplacement (x,y) (position de l'angle supérieur gauche de la chaîne de caractère). La police du caractère peut-être choisie parmi les polices par défaut (1 à 5) ou bien une police personnalisé que vous avez ouvert précédemment avec imageloadfont() Booléen imagestringup(entier image,entier police,entier x,entier y,chaîne texte,entier couleur) Crée une chaîne de caractères orientée verticalement (rotation de 90°) à l'emplacement (x,y) (position de l'angle supérieur gauche de la chaîne de caractère). La police du caractère peut-être choisie parmi les polices par défaut (1 à 5) ou bien une police personnalisé que vous avez ouvert précédemment avec imageloadfont()
  • 58.
    Initiation au langagePHP Page 58 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 12.6. Un diagramme de visiteurs On définit un tableau contenant le nombre de page vues par mois : par exemple, on suppose que 1500 pages du site ont été vues en janvier, 2450 en février, etc… Bien sur, pour que ce script soit vraiment valides, vous n'allez pas déclarer ce tableau, car sinon, les bâtons seront toujours les mêmes :) Vous allez plutôt effectuer une requête SQL sur votre base de données permettant de récupérer le nombre de pages vues de votre site par mois. Ensuite, il suffira d'appeler le script avec ces 12 paramètres dans votre page html (en faisant par exemple : <img src="./stats_year.php?visite_par_mois[1]=1500& visite_par_mois[2]=2400…….">) <?php $visite_par_mois[1]=1500; $visite_par_mois[2]=2450; $visite_par_mois[3]=1400; $visite_par_mois[4]=1780; $visite_par_mois[5]=1900; $visite_par_mois[6]=2450; $visite_par_mois[7]=1684; $visite_par_mois[8]=1845; $visite_par_mois[9]=3450; $visite_par_mois[10]=1980; $visite_par_mois[11]=1234; $visite_par_mois[12]=5000; $total=0; for ($i=1; $i<=12; $i++) { $total += $visite_par_mois[$i]; } // on calcule le nombre de pages vues sur l’année $max_visite = max($visite_par_mois); // on spécifie le type d'image que l'on va créer, ici ce sera une image au format JPEG if (headers_sent()) { print('<meta http-equiv="Content-type" content="image/jpeg">'); } else { header ("Content-type: image/jpeg"); } // on définit la largeur et la hauteur de notre image $largeur = 400; $hauteur = 250; /* on crée une ressource pour notre image qui aura comme largeur $largeur et $hauteur comme hauteur (on place également un or die si la création se passait mal afin d'avoir un petit message d'alerte)*/ $im = @ImageCreate ($largeur, $hauteur) or die ("Erreur lors de la création de l'image");
  • 59.
    Initiation au langagePHP Page 59 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 /* on place tout d'abord la couleur blanche dans notre table des couleurs (je vous rappelle donc que le blanc sera notre couleur de fond pour cette image).*/ $blanc = ImageColorAllocate ($im, 255, 255, 255); /* on place aussi le noir dans notre palette, ainsi qu'un bleu foncé et un bleu clair*/ $noir = ImageColorAllocate ($im, 0, 0, 0); $rouge = ImageColorAllocate ($im, 255, 0, 0); $bleu_fonce = ImageColorAllocate ($im, 0, 130, 195); $bleu_clair = ImageColorAllocate ($im, 95, 160, 240); // on dessine un trait horizontal pour représenter l'axe du temps ImageLine ($im, 20, $hauteur-40, $largeur-80, $hauteur-40, $noir); // on affiche le numéro des 12 mois for ($i=1; $i<=12; $i++) { if ($i==1) { ImageString ($im, 2, 25, $hauteur-38, $i, $noir); } else { ImageString ($im, 2, ($i)*25, $hauteur-38, $i, $noir); } } // on dessine un trait vertical pour représenter le nombre de pages vues ImageLine ($im, 20, 30, 20, $hauteur-40, $noir); // on dessine un trait vertical pour représenter le nombre de pages vues //ImageLine ($im, 25*13, 30, 25*13, $hauteur-40, $noir); // on affiche les legendes sur les deux axes ainsi que différents textes (note : pour que le script trouve la police verdana, vous devrez placer la police verdana dans un repertoire /fonts/) imagettftext($im, 14, 0, $largeur-70, $hauteur-30, $noir, "Fonts/verdana.ttf", "Mois"); imagettftext($im, 14, 0, 10, 20, $noir, "Fonts/verdana.ttf", " % pages vues"); imagettftext($im, 14, 0, $largeur-250, 20, $noir, "Fonts/verdana.ttf", "Statistiques pour l'année 2005"); // on parcourt les douze mois de l'année for ($mois=1; $mois <= 12; $mois++) { if ($visite_par_mois[$mois]!="0") { // on calcule la hauteur du baton $hauteurImageRectangle = ceil(((($visite_par_mois[$mois])*($hauteur-50))/$max_visite)); if ($mois=="1") { // si le mois est janvier, on affiche notre premier baton // on affiche le premier baton noir ImageFilledRectangle ($im, 25, $hauteur- $hauteurImageRectangle, 25+14, $hauteur-41, $noir); // on affiche le second baton, bleu foncé, qui sera un peu plus petit que le noir afin de recouvrir une partie du noir
  • 60.
    Initiation au langagePHP Page 60 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 ImageFilledRectangle ($im, 27, $hauteur- $hauteurImageRectangle+2, 25+12, $hauteur-41-1, $bleu_fonce); // on affiche le dernier baton, bleu clair, qui sera un peu plus petit que le bleu foncé afin de recouvrir une partie du bleu foncé (on obtiendra ainsi un effet de dégradé) ImageFilledRectangle ($im, 29, $hauteur- $hauteurImageRectangle+2, 25+8, $hauteur-41-1, $bleu_clair); imagettftext($im, 10, 0, 25, ($hauteur-$hauteurImageRectangle)-3, $rouge, "Fonts/verdana.ttf", round(($visite_par_mois[$mois]/$total)*100)); } else { // si le mois est different de janvier, on affiche les autres batons ImageFilledRectangle ($im, ($mois)*25, $hauteur- $hauteurImageRectangle, ($mois)*25+14, $hauteur-41, $noir); ImageFilledRectangle ($im, ($mois)*25+2, $hauteur- $hauteurImageRectangle+2, ($mois)*25+12, $hauteur-41-1, $bleu_fonce); ImageFilledRectangle ($im, ($mois)*25+6, $hauteur- $hauteurImageRectangle+2, ($mois)*25+8, $hauteur-41-1, $bleu_clair); imagettftext($im, 10, 0, ($mois)*25, ($hauteur- $hauteurImageRectangle)-3, $rouge, "Fonts/verdana.ttf", round(($visite_par_mois[$mois]/$total)*100)); } } } // on dessine le tout Imagejpeg ($im); ?>
  • 61.
    Initiation au langagePHP Page 61 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 XIII. LES SESSIONS ET LES COOKIES 13.1. Les sessions Les sessions sont importantes pour la sécurité de vos scripts. En effet, afin de transmettre des variables de pages en pages, plusieurs possibilités s'offrent à vous : - les divers champs des formulaires, qu'ils soient hidden ou non. - passer les variables directement à travers les liens. - utiliser les cookies. - utiliser les sessions. Cependant, toutes ces possibilités n'offrent pas le même niveau de sécurité. En effet, certaines de ces possibilités sont vraiment pratiquent dans leurs modes d'utilisation (comme les cookies par exemple mais tout le monde n'est pas obligé d'accepter les cookies), ce qui implique, dans la majorité des cas, un bas niveau de sécurité (cas du passage des variables par les liens, ce qui implique que les variables seront visibles de tout le monde). De même, faire dans chaque page un formulaire contenant des champs hidden permettant de faire circuler les différentes variables à travers toutes les pages du site n'est pas vraiment pratique. C'est pourquoi, dans tous ces cas où la sécurité de vos données est primordiale, vous devrez utiliser les sessions qui vous permettront de faire circuler différentes variables (comme un mot de passe par exemple) à travers les pages de votre site, tout en étant assez confortables à l'emploi. Pour utiliser les sessions, différentes fonctions PHP s'offrent à nous. Voici déjà un petit tableau vous permettant de vous familiariser avec ces différentes fonctions (que nous détaillerons bien sur dans la suite de ce tutorial) : Fonction Signification Session_start Démarre une session Session_register Enregistre une variable de session Session_unregister Efface une variable de session Session_is_registered Vérifie si une variable est déclarée pour la session en cours session_id Retourne l'id de la session en cours Session_name Retourne le nom de la session en cours Session_unset Detruit toutes les variables de la session en cours Session_destroy Destruit la session en cours Attention !!! Avant d'aller plus loin, vous devez savoir que les sessions ne sont accessibles qu'à partir de PHP 4. Cependant, je vous rassure, la plupart des hébergeurs supportent aujourd'hui PHP 4. Afin de voir concrètement comment fonctionnent les sessions, prenons alors un exemple simple : - imaginons que notre site possède une section membre où chaque membre devra se logué avant de pouvoir y entrer. - de plus, on aimerait bien être sur qu'il s'agisse toujours de ce même membre qui est connecté.
  • 62.
    Initiation au langagePHP Page 62 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 On aura alors une page contenant un formulaire permettant à notre visiteur de se connecter à une section membre (page index.htm) : <form action="login.php" method="post"> Votre login : <input type="text" name="login"> <br> Votre mot de passé : <input type="password" name="pwd"><br> <input type="submit" value="Connexion"> </form> D'après cette page, vous pouvez remarquer que lorsque le visiteur le remplira et qu'il cliquera sur le bouton de connexion, on se retrouvera au niveau de la page login.php avec une variable $pseudo qui contiendra le login de notre visiteur ainsi qu'une variable $pwd contenant son mot de passe ; variables qu'il faudra naturrellement tester avant de démarrer notre session (car seuls les membres pourront accéder à notre espace membre, espace où l'on utilisera notre session). On aura par exemple (page login.php) : <?php // on teste si nos variables sont définies if (isset($_POST['login']) && isset($_POST['pwd'])) { /*on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe*/ if ($_POST['login'] ==$login_valide && $pwd_valide == $_POST['pwd']) { / dans ce cas, tout est ok, on peut démarrer notre session // on la démarre :) session_start (); /*on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)*/ $_SESSION['login'] = $_POST['login']; $_SESSION['pwd'] = $_POST['pwd']; // on redirige notre visiteur vers une page de notre section membre header ('location: page_membre.php'); } } ?> Voyons alors le code de la page de notre section membre, la page page_membre.php. On a : <?php // On démarre la session (ceci est indispensable dans toutes les pages de notre section membre) session_start ();
  • 63.
    Initiation au langagePHP Page 63 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 // On teste pour voir si nos variables ont bien été enregistrées if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) { echo '<html>'; echo '<head>'; echo '<title>Page de notre section membre</title>'; echo '</head>'; echo '<body>'; echo 'Votre login est '.$_SESSION['login'].' et votre mot de passe est '.$_SESSION['pwd'].'.'; echo '<br>'; // On affiche un lien pour fermer notre session echo '<a href="./logout.php">Déconnection</a>'; } else { echo 'Les variables ne sont pas déclarées.'; } ?> Voyons alors le code de la page permettant au membre de se déconnecter (la page logout.php). On aura alors : <?php // On démarre la session session_start (); // On détruit les variables de notre session session_unset (); // On détruit notre session session_destroy (); // On redirige le visiteur vers la page d'accueil header ('location: index.htm'); ?> - chaque session à un id différent (ce qui permet d'éviter la confusion entre les connexions). - à chaque page où notre session doit être active, on doit placer un session_start en tout début de page (avant tout code HTML). - toutes les variables enregistrées au cours de notre session, seront accessibles dans les pages de notre session. - n'oubliez JAMAIS de détruire vos variables de session lors de la déconnexion. En respectant ces règles vous pourrez très rapidement faire vous-même votre espace membre, voir même pourquoi pas une boutique en ligne :) 13.2. Les cookies PHP permet de gérer très facilement les cookies ; 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. 13.2.1. 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
  • 64.
    Initiation au langagePHP Page 64 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 cookies dans les en-têtes HTTP Voici la syntaxe de la fonction setcookie: booléen setcookie(chaîne NomDuCookie, chaîne Valeur, entier expiration, chaîne chemin, chaîne domaine, entier securisé); L'argument NomDuCookie est celui qui vous permettra de faire référence à un cookie spécifique stocké sur le disque des utilisateurs. A chaque cookie correspond un nom auquel une valeur est attribuée. Les arguments suivants servent à déterminer les conditions de validité du cookie: expiration: détermine le moment à partir duquel le cookie sera effacé du disque du client. Elle doit être passée sous forme d'un entier indiquant le nombre de secondes à compter du 1er janvier 1970 à partir desquelles le cookies n'est plus valide. Il est généralement d'usage d'utiliser la fonction now() qui retourne le nombre de secondes de cette date à maintenant et d'y ajouter le nombre de secondes de validités que l'on désire. Pour un cookie valide pendant un an ce sera now()+31536000. Dans certains cas la fonction mktime() peut s'avérer elle aussi très pratique chemin désigne le répertoire à partir de la racine de votre domaine pour lequel votre cookie est valide, c'est-à-dire que si vous ne voulez utiliser le cookie que dans des scripts stockÉs dans le répertoire /commerce il faudra définir le chemin /commerce/ domaine il s'agit du domaine de votre serveur, celui-ci doit obligatoirement contenir 2 points (par exemple www.ntic.ci). Par défaut (si vous omettez ce paramètre) le domaine qui a créé le cookie (donc le votre) sera automatiquement inséré sécurisé lorsqu'il est mis à 1 indique que le cookie ne sera transmis que si la ligne est sécurisée (par SSL ou S-HTTP La fonction setcookie() doit être utilisée avant tout envoi de données HTML vers le navigateur, même si ces données sont envoyées avec echo, print ou équivalent (le script qui la contient doit donc être placé avant la balise <HTML> et avant toute fonction echo(),print ou printf()). Le cookie n'est pas visible avant le prochain chargement de page. Avec PHP si vous envoyez plusieurs cookies de suite, les appels seront traités en ordre inverse, alors qu'avec PHP4 il seront traités dans l'ordre. Il est possible d'utiliser des tableaux dans un cookie. Autant de cookies que d'éléments du tableau seront alors envoyés, mais tout se fait de façon transparente, puisque à la lecture un tableau sera créé. Il est quand même préférable d'utiliser les fonctions implode et explode pour envoyer ainsi qu'un seul cookie. Il faut savoir que certains navigateurs ne traitent pas bien les cookies Microsoft Internet Explorer 4 avec le Service Pack 1 ne traite pas correctement les cookies qui ont le paramètre chemin défini. 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. 13.2.2. Exemple d'utilisation de cookies Voilà donc un script permettant de savoir si un visiteur est déjà venu sur le site pendant le mois: <?php setcookie( "Visites", "Oui",
  • 65.
    Initiation au langagePHP Page 65 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 time()+2592000, "/", ".cup.ci",0); ?> Quelques autres exemples: <?php // Envoi d'un cookie qui disparaîtra après la fermeture du navigateur SetCookie("CcmUserSessionCookie","$login:$pass"); // Envoi d'un cookie qui restera présent 24 heures SetCookie("CcmDejaVisite","1",time()+3600*24,"/",".phpfrance.com",0); // Envoi d'un cookie qui s'effacera le 1er janvier 2001 SetCookie("CcmAn2000","1",mktime(0,0,0,1,1,2001),"/",".phpfrance.com",0) ; ?> 13.2.3. Récupérer les valeurs d'un cookie Lorsqu'un cookie pour votre domaine est présent sur le disque du client, si celui-ci visite une de vos pages PHP dont le chemin est inclut dans le paramètre chemin (si le chemin est / le cookie est valide pour toutes les pages de votre site) le cookie sera automatiquement passé en paramètre à votre script et sa valeur sera directement accessible dans la variable $NomDuCookie. Voici le même script que précédemment permettant cette fois ci de compter le nombre de visite de la page par le visiteur: <?php $Visites++; setcookie( "Visites", $Visites, time()+2592000, "/", ".ntic.ci",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. 13.2.4. 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); ?>
  • 66.
    Initiation au langagePHP Page 66 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 XIV.NOTION DE CLASSES 14.1. introduction Php gère la programmation orientée objet à l’aide de classes. Exemple : class Voiture { // déclaration de la classe var $couleur; // déclaration d’un attribut var $belle = TRUE; // initialisation d’un attribut function voiture() { // constructeur $this->couleur = ‘’noire’’; } // le mot clé $this faisant référence à l’objet est obligatoire function Set_Couleur($couleur) { $this->couleur = $couleur; } } $mavoiture = new Voiture(); // création d’une instance $mavoiture->Set_Couleur(‘’blanche’’); // appel d’une méthode $coul = $mavoiture->couleur; // appel d’un attribut 14.2. sousclasse Le système de classes de php est très succint, il ne gère que l’héritage simple. Exemple : class Voituredeluxe extends Voiture { // déclaration de la sous classe var $couleur; function voituredeluxe() { // constructeur $this->Voiture(); } function Set_Couleur($couleur) { $this->couleur = $couleur; } function Get_Couleur() { return $this->couleur; } } La nouvelle classe Voituredeluxe hérite de tous les attributs et méthodes de la classe parente Voiture dont elle est une extension (extends). Il est possible de surcharger les méthodes, d’en déclarer de nouvelles, etc. 14.3. Quelques fonctions : get_declared_classes() : retourne un tableau listant toutes les classes définies class_exists($str) : vérifie qu'une classe dont le nom est passé en argument a été définie get_class($obj), get_parent_class : retournent le nom de la classe de l’objet $obj get_class_methods($str) : retourne les noms des méthodes de la classe $str dans un tableau
  • 67.
    Initiation au langagePHP Page 67 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 get_class_vars($str) : retourne les valeurs par défaut des attributs de la classe $str dans un tableau associatif get_object_vars($obj) : retourne un tableau associatif des attributs de l’objet $obj les clés sont les noms des attributs et les valeurs, celles des attributs si elles existent is_subclass_of($obj,$str) : détermine si l’objet $obj est une instanciation d’une sous-classe de $str, retourne VRAI ou FAUX method_exists($obj,$str) : vérifie que la méthode $str existe pour une classe dont $obj est une instance, retourne VRAI ou FAUX 14.4. remarque Tout objet instancié est une variable et peut à se titre être passé en argument à une fonction ou bien être un retour de fonction ou encore être sauvegardée en donnée de session. Il n’existe pas de destructeur : comme en Java, les objets qui cessent d’être utilisés sont automatiquement détruits. Il n’y a pas de notion de visibilité : tous les attributs et méthodes sont publiques et une classe hérite forcément de tous les attributs et méthodes de son père. Une classe fille hérite de tous les attributs et méthodes de la classe parente dont elle est une extension (d’ou la syntaxe extends). Il est possible de surcharger les méthodes, d’en définir de nouvelles…
  • 68.
    Initiation au langagePHP Page 68 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 XV.INTRODUCTION AUX BASES DE DONNEES (MYSQL) 15.1. Introduction MySQL est une base de données implémentant le langage de requête SQL un langage relationnel très connu. Cette partie suppose connue les principes des bases de données relationnelles. Il existe un outil libre et gratuit développé par la communauté des programmeurs libres : phpMyAdmin qui permet l’administration aisée des bases de données MySQL avec php. Il est disponible sur : http://sourceforge.net/projects/phpmyadmin/ et http://www.phpmyadmin.net. Avec MySQL vous pouvez créer plusieurs bases de données sur un serveur. Une base est composée de tables contenant des enregistrements. Plus d'informations sont disponibles à http://www.mysql.com/. La documentation de MySQL est disponibles à http://www.mysql.com/documentation/, ainsi qu'en français chez nexen : http://dev.nexen.net/docs/mysql/. 15.2. Connexion à une base de données Pour se connecter à une base depuis php, il faut spécifier un nom de serveur, un nom d’utilisateur, un mot de passe et un nom de base. Les fonctions de connexion : mysql_connect($server,$user,$password) : permet de se connecter au serveur $server en tant qu’utilisateur $user avec le mot de passe $password, retourne l’identifiant de connexion si succès, FALSE sinon mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne TRUE en cas de succès, sinon FALSE mysql_close([$id]) : permet de fermer la connexion mysql_pconnect : idem que mysql_connect sauf que la connection est persistante, il n’y a donc pas besoin de rouvrir la connexion à chaque script qui travaille sur la même base. Les identifiants de connexion ne sont pas nécessaires si on ne se connecte qu’à une seule base à la fois, ils permettent seulement de lever toute ambiguïté en cas de connexions multiples. Exemple 1 : <?PHP $mysql_host = 'localhost'; // entrer le serveur d’hebegement $mysql_user = 'root'; // entrer nom utilisateur $mysql_password =''; // entrer mot de passe // on se connecte au server mysql $db = mysql_connect($mysql_host, $mysql_user, $mysql_password) or die("erreur de connexion"); // selection de la base mysql_select_db($mysql_base,$db) or die ("erreur de connexion à la base"); ?> On pourra avantageusement intégrer ce code dans un fichier que l’on pourra joindre par include(). C’est aussi un moyen de sécuriser le mot de passe de connexion.
  • 69.
    Initiation au langagePHP Page 69 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Une connexion persistante évite d’avoir à rouvrir une connexion dans chaque script. Les connexions sont automatiquement fermées au bout d’un certain temps en cas d’absence de toute activité… 15.3. manipulation 15.3.1. cretaion de requete Pour envoyer une requête à une base de donnée, il existe la fonction : mysql_query($str) qui prend pour paramètre une chaîne de caractères qui contient la requête écrite en SQL et retourne un identificateur de résultat ou FALSE si échec. Les requêtes les plus couramment utilisées sont : CREATE (création d’une table), SELECT (sélection), INSERT (insertion), UPDATE (mise à jour des données), DELETE (suppression), ALTER (modification d’une table), etc. Exemple : $result = mysql_query(‘’SELECT address FROM users WHERE name=’’$name’’’’); Cet exemple recherche l’adresse de l’utilisateur portant pour nom la valeur de la chaîne $name. L’identificateur de résultat $result permettra à d’autres fonctions d’extraire ligne par ligne les données retournées par le serveur. Attention, contrairement à Oracle SQL, les requêtes MySQL ne se terminent pas par un point virgule ‘;’ et n’autorisent pas les SELECT imbriqués. Une fois la requête effectuée et l’identificateur de résultat acquis, il ne reste plus qu’à extraire les données retournées par le serveur. Sous Oracle, l’affichage des résultats d’une requête se fait ligne par ligne, sous MySQL, c’est pareil. Une boucle permettra de recueillir chacune des lignes à partir de l’identifiant de résultat. SQL > SELECT * FROM users; ID NAME ADDRESS ---------------------------- 1 Soro Korhogo ← 1ère ligne 2 Kanga Daoukro ← 2ème ligne 3 Atte Abidjan ← 3è ligne Une ligne contient (sauf cas particulier) plusieurs valeurs correspondant aux différents attributs retournés par la requête. Ainsi, une ligne de résultat pourra être sous la forme d’un tableau, d’un tableau associatif, ou d’un objet. 15.3.2. Extraction en tableau simple mysql_fetch_row($result) : retourne une ligne de résultat sous la forme d’un tableau. Les éléments du tableau étant les valeurs des attributs de la ligne. Retourne FALSE s’il n’y a plus aucune ligne. Exemple 1 : $requet = "SELECT * FROM user"’; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_row($result)) { $id = $ligne[0]; $name = $ligne[1]; $address = $ligne[2]; echo"$id - $name, $addres <br/>"; } } else { echo "Erreur de requête de base de données. "; }
  • 70.
    Initiation au langagePHP Page 70 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Ici, on accède aux valeurs de la ligne par leur indice dans le tableau. 15.3.3. Extraction en tableau associatif mysql_fetch_array($result) : retourne un tableau associatif. Les clés étant les noms des attributs et leurs valeurs associées leurs valeurs respectives. Retourne FALSE s’il n’y a plus aucune ligne. Exemple 2 : $requet = "SELECT * FROM users"; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_array($result)) { $id = $ligne["id"]; $name = $ligne["name"]; $address = $ligne["address"]; echo "$id - $name, $address <br/>"; } } else { echo "Erreur de requête de base de données. "; } Ici, on accède aux valeurs de la ligne par l’attribut dans le tableau associatif. 15.3.4. Extraction en objet mysql_fetch_object($result) : retourne un objet. Les attributs de l’objet correspondent à ceux de la ligne de résultat. Et les valeurs des attributs de l’objet correspondent à ceux de la ligne de résultat. Retourne FALSE s’il n’y a plus aucune ligne. Exemple 3 : $requet = "SELECT * FROM users"; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_object($result)) { $id = $ligne->id; $name = $ligne->name; $address = $ligne->address; echo "$id - $name, $address <br />"; } } else { echo "Erreur de requête de base de données. "; } Ici, on accède aux valeurs par leur attribut dans l’objet. 15.4. Quelques fonctions supplémentaires très utiles mysql_free_result($result) : efface de la mémoire du serveur les lignes de résultat de la requête identifiées par $requet. Très utile pour améliorer les performances du serveur. mysql_insert_id([$id]) : retourne l’identifiant d’un attribut clé primaire AUTO_INCREMENT de la dernière insertion. mysql_num_fields($result) : retourne le nombre d’attributs du résultats. mysql_num_rows($result) : retourne le nombre de lignes du résultats. Et ainsi permet de remplacer le while par un for. Penser à bien tester la valeur de retour des fonctions (mysql_query et les autres) afin de détecter toute erreur et d’éviter de polluer votre page avec des Warnings.
  • 71.
    Initiation au langagePHP Page 71 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 XVI.MINI PROJET Un livre d’or dans un espace membre avec espace administration.
  • 72.
    Initiation au langagePHP Page 72 sur 72 __________________________________________________________________________ Cours réalisé par Mr Nabeledi Ouattara *** Développeur Web*** Edition 2009 Sources http://www.commentcamarche.com Jean-François Pillou http://cyberzoide.developpez.com Hugo Etiévant 12 0octobre 2002 http://www.easyphp.org http://dev.nexen.net http://lwest.free.fr/doc/php/ http://www.phpfrance.com http://fr.php.net/ http://www.devshed.com/Server_Side/PHP/Introduction/ http://clauer.citeweb.net/php3tut/php3_tut.html http://www.lephpfacile.com/manuel_php/