Cours Complet de PHP pour Débutants
Cours Complet de PHP pour Débutants
COURS DE PHP
Introduction
PHP: Hypertext Preprocessor, plus connu sous son sigle PHP, est un langage de
programmation libre, principalement utilisé pour produire des pages Web
dynamiques via un serveur HTTP. PHP est un langage impératif orienté objet.
Il s'agit d'un langage de script interprété côté serveur.
Il est considéré comme une des bases de la création de sites web dits
dynamiques mais également des applications web. PHP a permis de créer un
grand nombre de sites web célèbres, comme Facebook, Wikipédia, etc.
Le logo considéré comme officiel du PHP est l'éléPHPant avec l'acronyme PHP
sur son côté. Il est créé en 1998 par Vincent Pontier.
HISTORIQUE
Le langage PHP fut créé en 1994 par Rasmus Lerdorf pour son site web.
C’était à l’origine une bibliothèque logicielle écrite d’abord en langage Perl,
puis en langage C. Il s’en servait pour conserver une trace des visiteurs qui
venaient consulter son CV. PHP signifiait alors Personal Home Page tools. Le
code source de PHP fut publié par son auteur en 1996. En 1997, deux
étudiants, Andi Gutmans et Zeev Suraski, redéveloppèrent le cœur de PHP
puis son moteur interne, aboutissant à ce qu’on appelle le Zend Engine.
Depuis les versions du langage se sont succédées, apportant leur lot
d’améliorations et corrigeant les (nombreuses) failles de sécurité apparues en
chemin. La version 5 de PHP, sortie en 2004, utilise Zend Engine 2 et introduit
un véritable modèle objet, une gestion des erreurs fondée sur le modèle des
exceptions, ainsi que des fonctionnalités de gestion pour les entreprises.
1
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
FONCTIONNEMENT
Même s’il peut être utilisé en ligne de commande, PHP est principalement
associé à un serveur Web utilisant le protocole HTTP dans le cadre d’une
architecture client/serveur.
Dans le cas de PHP comme langage serveur, les combinaisons les plus
courantes sont celles d'une plateforme LAMP (pour Linux Apache MySQL
PHP) et WAMP (Windows Apache MySQL PHP). Une plate-forme WAMP
s'installe généralement par le biais d'un seul logiciel qui intègre Apache,
MySQL et PHP, par exemple EasyPHP et WampServer. Il existe le même type
de logiciels pour les plates-formes MAMP (Mac OS Apache MySQL PHP), à
l'exemple du logiciel MAMP.
2
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
SYNTAXE
Dans la suite, nous allons découvrir la syntaxe du PHP. Celle-ci est très proche
de la syntaxe du C. Il existe cependant quelques différences. Le PHP est un
langage de plus haut niveau que le C. Il permet donc de réaliser certaines
manipulations plus simplement qu'en C.
Exemple
L'exemple ci-dessous présente un simple script PHP intégré dans une page
HTML. Le résultat de l'exécution produit une page HTML qui doit encore être
interprétée par un navigateur.
<html>
<head>
<title>Exemple</title>
</head>
<body>
<?php
echo "C'est un script PHP!\n";
?>
</body>
</html>
3
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Syntaxe de base
Le PHP doit être délimité par les balises ouvrante <?php et fermante ?>.
Lorsque PHP traite un fichier, il cherche les balises d'ouverture et de fermeture
qui délimitent le code qu'il doit interpréter. De cette manière, cela permet à
PHP d'être intégré dans toutes sortes de documents, car tout ce qui se trouve
en dehors des balises ouvrantes / fermantes de PHP est ignoré.
PHP supporte les commentaires de type C, C++ et Shell Unix (aussi appelé
style Perl). Par exemple :
<?php
echo "Ceci est un test\n"; // Ceci est un commentaire sur une seule ligne, style c++
/* Ceci est un commentaire sur
plusieurs lignes */
echo "Et un test final\n"; # Ceci est un commentaire style shell sur une seule ligne
?>
la syntaxe des variables. Le langage est non-typé, il ne faut donc pas déclarer
les variables. Afin de pouvoir les identifier malgré tout, les variables sont
toujours précédées du symbole $.
la non-présence d'une fonction main dans le code.
le paradigme événementiel plutôt que séquentiel. L'intégralité du script est
exécutée d'un seul coup sans arrêt.
o Le PHP va réagir à un événement, envoyer une requête au serveur via le
navigateur et recevoir un réponse.
o Le C exécute tour à tour chaque ligne de code en marquant un arrêt sur
certaines instructions nécessitant l'action de l'utilisateur.
4
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Les variables
En PHP, les variables commencent toujours par un $ suivi du nom de la variable. Le nom est
sensible à la casse.
<?php
//une variable
$ma_variable = 5;
?>
Le type d'une variable n'est généralement pas défini par le programmeur ; il sera défini par
PHP au moment de l'exécution, suivant le contexte dans lequel la variable est utilisée.
<?php
var_dump($an_int);
var_dump($a_str2);
?>
var_dump() : Affiche les informations structurées d'une variable, y compris son type et sa valeur.
Les tableaux et les objets sont explorés récursivement, avec des indentations, pour mettre en valeur
leur structure.
gettype() : Retourne le type d'une variable.
Bien que le PHP soit un langage non-typé, des types sont bien définis pour les variables.
BOOLEAN
C'est le type le plus simple. Un booléen représente une valeur de vérité. Il peut valoir TRUE
ou FALSE.
5
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<?php
$ma_variable = true; //assigne la valeur TRUE à $ma_variable
?>
Une page sera consacrée aux opérateurs booléen et de comparaison.
NUMBER
Number est un pseudo type indiquant qu'il peut s'agir aussi bien d'un entier que d'un nombre
décimal.
INTEGER
Un entier est un nombre appartenant à la classe Z={...,−2,−1,0,1,2,...}.
Les entiers peuvent être spécifiés en notation décimale (base 10), hexadécimale (base 16),
octale (base 8), ou binaire (base 2). L'opérateur de négation peut être utilisé pour désigner un
entier négatif.
<?php
$a = 1234; // un nombre décimal
$a = -123; // un nombre négatif
$a = 0123; // un nombre octal (équivalent à 83 en décimal)
$a = 0x1A; // un nombre héxadecimal (équivalent à 26 en décimal)
$a = 0b11111111; // un nombre binaire (équivalent à 255 en decimal)
?>
FLOAT
Les nombres décimaux (aussi connus comme nombres à virgule flottante, "floats", "doubles",
ou "real numbers") peuvent être spécifiés en utilisant les syntaxes suivantes :
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
OPERATEURS
Les opérateurs mathématiques du PHP sont repris dans le tableau ci-après.
6
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
EXEMPLE NOM
-$a Négation
$a + $b Addition
$a - $b Soustraction
$a * $b Multiplication
$a / $b Division
$a % $b Modulus
$a ** $b Exponentielle
L'opérateur de division / retourne une valeur à virgule flottante. Pour la division entière, il
faut utiliser la fonction intdiv.
<?php
$a=7;
$b=2;
var_dump(-$a);
var_dump($a+$b);
var_dump($a-$b);
var_dump($a*$b);
var_dump($a/$b);
var_dump($a%$b);
var_dump($a**$b);
var_dump(intdiv($a,$b));
?>
7
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
STRING
Une chaîne de caractères est une série de caractères. Une chaîne de caractères littérale peut
être spécifiée de 4 façons différentes :
$a = "Hello World";
echo "\n";
//Heredoc
echo <<<SYMBOL
J'affiche $a
SYMBOL;
//Nowdoc
echo <<<'SYMBOL'
J'affiche $a
SYMBOL;
?>
OPERATEUR (STRING)
Il y a deux opérateurs de chaînes de caractères string. Le premier est l'opérateur de
concaténation ., qui retourne la concaténation de ses deux arguments. Le second est
l'opérateur d'affectation concaténant .=.
<?php
$a = "Hello";
echo $a;
?>
8
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
ARRAY
Un tableau en PHP est en fait une carte ordonnée. Une carte est un type qui associe des
valeurs à des clés. On parlera de tableau associatif. Pour définir un tableau on utilise le mot-
clé array ou les [ ].
Une page sera consacrée à l'usage des tableaux en PHP.
<?php
var_dump($table);
$array = array(
);
$tableau = [
];
?>
object
Il s'agit d'objet dans le cadre de la programmation orientée objet qui ne fait pas partie de ce
cours.
9
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Une ressource représente un fichier ouvert, une connexion à une base de données, une image,
etc. Lors de la connexion à une base de données, nous manipulerons une ressource. Il faudra
donc la manipuler avec des fonctions spécifiques.
NULL
La valeur spéciale NULL représente une variable sans valeur. NULL est la seule valeur
possible du type NULL.
Il est pratique d'avoir parfois des noms de variables qui sont variables. C'est-à-dire un nom de
variable qui est affecté et utilisé dynamiquement. Une variable classique est affectée avec
l'instruction suivante :
<?php
$a = 'bonjour';
?>
Une variable dynamique prend la valeur d'une variable et l'utilise comme nom d'une autre
variable. Dans l'exemple ci-dessous, bonjour peut être utilisé comme le nom d'une variable en
utilisant le "$$" précédent la variable. C'est-à-dire :
<?php
$a = 'bonjour';
$$a = 'monde';
?>
10
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
À ce niveau, deux variables ont été définies et stockées dans l'arbre des symboles PHP : $a
avec comme valeur "bonjour" et $bonjour avec comme valeur "monde".
<?php
$a = 'bonjour';
$$a = 'monde';
?>
Afin de pouvoir utiliser les variables dynamiques avec les tableaux, vous avez à résoudre un
problème ambigu. Si vous écrivez $$a[1], l'analyseur a besoin de savoir si vous parlez de la
variable qui a pour nom $a[1] ou bien si vous voulez l'index [1] de la variable $$a. La syntaxe
pour résoudre cette ambiguïté est la suivante : ${$a[1]} pour le premier cas et ${$a}[1] pour
le deuxième.
Les constantes
Une constante est un identifiant (un nom) qui représente une valeur simple. Comme son nom
le suggère, cette valeur ne peut jamais être modifiée durant l'exécution du script. Par défaut, le
nom d'une constante est sensible à la casse. Par convention, les constantes sont toujours en
majuscules.
<?php
define("FOO","Hello");
?>
Le plus souvent les opérateurs logiques et de comparaison sont utilisés en tant qu'expression
booléenne simple ou complexe dans les conditions de boucle ou les alternatives.
Opérateurs logiques
11
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Le tableau ci-dessous reprend la liste des opérateurs logiques par ordre de priorité.
$a xor $b XOR TRUE si $a OU $b est TRUE, mais pas les deux en même temps.
<?php
$a=true;
$b=false;
12
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Opérateurs de comparaison
Les opérateurs de comparaison, comme leur nom l’indiquent, vous permettent de comparer
deux valeurs.
$a !== $b Différent TRUE si $a est différent de $b ou bien s'ils ne sont pas du même type.
$a < $b Plus petit TRUE si $a est strictement plus petit que $b.
$a > $b Plus grand TRUE si $a est strictement plus grand que $b.
Inférieur ou
$a <= $b TRUE si $a est plus petit ou égal à $b.
égal
Supérieur ou
$a >= $b TRUE si $a est plus grand ou égal à $b.
égal
<?php
$a=1;
$b='1';
var_dump($a==$b);
var_dump($a===$b);
?>
13
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Il existe un dernier opérateur un peu différent :
$a <=> $b Combiné Un entier inférieur, égal ou supérieur à zéro lorsque $a est respectivement inférieur
<?php
var_dump(1<=>1);
var_dump(1<=>2);
var_dump(2<=>1);
?>
LES FONCTIONS
<?php
var_dump(isset($a));
$a="";
var_dump(isset($a));
var_dump(empty($a));
?>
14
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Les tableaux
Un tableau en PHP est en fait une carte ordonnée. Une carte est un type qui
associe des valeurs à des clés. On parlera de tableau associatif. Pour définir
un tableau, on utilise le mot-clé array ou les [ ].
1. numérique ;
2. chaîne de caractères.
Un même tableau peut utiliser à la fois des clés numériques et des clés
chaînes de caractères.
<?php
var_dump($tab1);
var_dump($tab2);
var_dump($tab3);
?>
L'ordre dans lequel sont rangées les clés numériques ne dépend pas de la
valeur numérique mais de l'ordre de définition. De même, toutes les valeurs de
clés numériques ne doivent pas obligatoirement exister.
<?php
$tab[0]=1;
$tab[3]=5;
$tab[7]=3;
$tab[1]=7;
$tab[5]=1;
var_dump($tab);
?>
15
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Une grande différence avec un langage comme le C est qu'un tableau peut
contenir simultanément différents types de variables.
<?php
$tab["chaine"] = "Bonjour";
$tab["booleen"] = true;
$tab["entier"] = 5;
$tab["decimal"] = 5.6;
var_dump($tab);
?>
Tableaux multidimensions
Comme précisé ci-dessus, un tableau peut contenir des types scalaires et/ou
des types composés. Un tableau multidimensionnel est un tableau contenant
d'autres tableaux. Contrairement à un langage comme le C, le tableau n'a pas
nécessairement la même dimension sur chacune de ses entrées. Cela vient
du fait que chaque entrée peut posséder des types différents.
<?php
$tab = array(
array(1,2,3),
array("chaine",true),
);
var_dump($tab);
?>
16
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Opérateurs
Non-
$a !== $b TRUE si $a n'est pas identique à $b.
identique
<?php
var_dump($a==$b);
var_dump($a===$b);
?>
<?php
$c = $a + $b; // Union de $a et $b
var_dump($c);
17
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
$c = $b + $a; // Union de $b et $a
var_dump($c);
?>
LES CONDITIONS
IF
L'instruction if est une des plus importantes instructions de tous les langages, PHP inclus.
Elle permet l'exécution conditionnelle d'une partie de code.
Comme nous l'avons vu dans le paragraphe consacré aux expressions, une expression est
convertie en sa valeur booléenne. Si l'expression vaut TRUE, PHP exécutera l'instruction et si
elle vaut FALSE, l'instruction sera ignorée.
<?php
$a=5;
$b=3;
if ($a > $b) {
echo "a est plus grand que b";
}
?>
ELSE
Souvent, vous voulez exécuter une instruction si une condition est remplie, et une autre
instruction si cette condition n'est pas remplie. C'est à cela que sert else. else fonctionne
après un if et exécute les instructions correspondantes au cas où l'expression du if est
FALSE. Dans l'exemple suivant, ce bout de code affiche a est plus grand que b si la variable
$a est plus grande que la variable $b, et a est plus petit que b sinon :
<?php
$a=2;
$b=3;
if ($a > $b) {
echo "a est plus grand que b";
}
else {
echo "a est plus petit que b";
}
?>
ELSEIF / ELSE IF
18
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
elseif, comme son nom l'indique, est une combinaison de if et de else. Comme
l'expression else, il permet d'exécuter une instruction après un if dans le cas où le
"premier" if est évalué comme FALSE. Mais, à la différence de l'expression else, il
n'exécutera l'instruction que si l'expression conditionnelle elseif est évaluée comme TRUE.
L'exemple suivant affichera a est plus grand que b, a est égal à b ou a est plus petit que b :
<?php
$a=5;
$a=5;
if ($a > $b) {
echo "a est plus grand que b";
} elseif ($a == $b) {
echo "a est égal à b";
} else {
echo "a est plus petit que b";
}
?>
switch
L'instruction switch équivaut à une série d'instructions if. En de nombreuses occasions, vous
aurez besoin de comparer la même variable (ou expression) avec un grand nombre de valeurs
différentes, et d'exécuter différentes parties de code suivant la valeur à laquelle elle est égale.
C'est exactement à cela que sert l'instruction switch.
<?php
$i=1;
switch ($i) {
case 0:
echo "i égal 0";
break;
case 1:
echo "i égal 1";
break;
case 2:
echo "i égal 2";
break;
default:
echo "i n'est ni égal à 2, ni à 1, ni à 0.";
}
?>
Le break est nécessaire pour arrêter l'exécution à la fin du case. Sans cela, les instructions
du case suivant seront également exécutées.
Le default est utilisé si aucune évaluation de case n'était vraie.
Alternative ternaire
19
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
while
La boucle while est le moyen le plus simple d'implémenter une boucle en PHP. Cette boucle
se comporte de la même manière qu'en C.
La signification d'une boucle while est très simple. PHP exécute l'instruction tant que
l'expression de la boucle while est évaluée comme TRUE. La valeur de l'expression est
vérifiée à chaque début de boucle, et, si la valeur change durant l'exécution de l'instruction,
l'exécution ne s'arrêtera qu'à la fin de l'itération. Si l'expression du while est FALSE avant la
première itération, l'instruction ne sera jamais exécutée.
<?php
$i = 1; //Essayer avec $i qui vaut 10
while ($i < 10) {
echo $i . " ";
$i++;
}
?>
do while
Les boucles do while ressemblent beaucoup aux boucles while, mais l'expression est testée
à la fin de chaque itération plutôt qu'au début. La principale différence par rapport à la
boucle while est que la première itération de la boucle do while est toujours exécutée.
<?php
$i = 1; //Essayer avec $i qui vaut 10
do {
echo $i . " ";
$i++;
} while ($i < 10);
?>
for
Les boucles for sont généralement utilisées quand le nombre d'itérations est connu à l'avance.
for (expr1; expr2; expr3)
commandes
La première expression (expr1) est évaluée (exécutée), quoi qu'il arrive au début de la boucle.
20
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Au début de chaque itération, l'expression expr2 est évaluée. Si l'évaluation vaut TRUE, la
boucle continue et les commandes sont exécutées. Si l'évaluation vaut FALSE, l'exécution de
la boucle s'arrête.
<?php
for ($i = 1; $i < 10; $i++) {
echo $i . " ";
}
?>
foreach
La structure de langage foreach fournit une façon simple de parcourir des tableaux. foreach ne
fonctionne que pour les tableaux et les objets, et émettra une erreur si vous tentez de l'utiliser
sur une variable de type différent ou une variable non initialisée.
La seconde forme assignera en plus la clé de l'élément courant à la variable $key à chaque
itération.
<?php
$arr = array(1, 2, 3, 4); //Ajouter des éléments au tableau
foreach ($arr as $valeur) {
echo $valeur . "\n";
}
echo "\n";
21
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Les fonctions
En PHP, les fonctions n'ont pas besoin d'être définies avant d'être utilisées. Les noms de
fonction sont insensibles à la casse, et il est généralement admis que les fonctions doivent être
appelées avec le nom utilisé dans leur déclaration, y compris la casse.
<?php
function foo()
{
echo "Exemple de fonction.\n";
}
?>
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Exemple de fonction.\n";
}
?>
<?php
$var1=5;
$var2=9;
echo "var1=$var1\n";
echo "var2=$var2\n";
22
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
echange($var1,$var2);
echo "var1=$var1\n";
echo "var2=$var2\n";
function echange($a,$b) {
$tmp=$a;
$a=$b;
$b=$tmp;
?>
Si vous voulez qu'un argument soit toujours passé par référence, vous pouvez ajouter
un & devant l'argument dans la déclaration de la fonction.
<?php
$var1=5;
$var2=9;
echo "var1=$var1\n";
echo "var2=$var2\n";
echange($var1,$var2);
echo "var1=$var1\n";
echo "var2=$var2\n";
function echange(&$a,&$b) {
$tmp=$a;
$a=$b;
$b=$tmp;
?>
<?php
23
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
return $retval;
?>
<?php
WhatToDoWithBeer("Servir","une Leffe");
WhatToDoWithBeer("Affoner");
WhatToDoWithBeer(NULL,"une Maes");
WhatToDoWithBeer();
?>
Les arguments avec une valeur par défaut ne sont plus obligatoires. Il faut cependant que les
arguments non-définis soient les derniers paramètres de la fonction pour ne pas devoir les
renseigner.
<?php
function sum(...$numbers) {
$acc = 0;
24
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
$acc += $n;
return $acc;
?>
Vous pouvez spécifier des arguments classiques avant le mot clé .... Dans ce cas, seuls les
arguments finaux qui ne correspondent pas à un argument classique seront ajoutés au tableau
généré par ....
<?php
fratrie("frère et soeur");
fratrie("frère", "Antoine");
function fratrie($type,...$noms) {
if (count($noms)>0) {
$phrase .= $nom;
echo "\n";
?>
Fonctions variables
Comme pour les variables, PHP supporte le concept de fonctions variables. Cela signifie que
si le nom d'une variable est suivi de parenthèses, PHP recherchera une fonction de même
nom, et essaiera de l'exécuter.
<?php
$ma_var = "foo";
$autre_var = "bar";
$ma_var();
25
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
$autre_var();
/******************************************/
/******************************************/
function foo() {
function bar() {
?>
Note: Sur les systèmes 32-bit une chaîne de caractères peut être d'une taille allant
jusqu'au plus 2Go (2147483647 octets maximum).
Syntaxe ¶
o Guillemets simples
o Guillemets doubles
o Syntaxe Heredoc
o Syntaxe Nowdoc
Guillemets simples ¶
Pour spécifier un guillemet simple littéral, il doit être échappé à l'aide d'un antislash
(\). Pour spécifier un antislash littéral, doublez-le (\\). Toute les autres instances
d'antislash seront traitées comme un antislash littéral : ce qui signifie que les autres
séquences auquelles vous êtes éventuellement habitués (comme \r ou \n)
s'afficheront telles quelles, sans avoir une quelconque signification particulière.
Note: Contrairement aux syntaxes avec double guillemets et heredoc, les variables et
les séquences d'échappement pour les caractères spéciaux ne
26
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
seront pas interprétées lorsqu'elles figurent dans une chaîne de caractères entourée
de guillemets simples.
<?php
echo 'ceci est une chaîne simple';
Guillemets doubles ¶
Caractères échappés
Séquence Signification
\\ Antislash
\$ Signe dollar
\[0- La séquence de caractères correspondant à cette expression rationnelle est un caractère, en notation oct
7]{1,3} silencieusement pour s'adapter à un octet (e.g. "\400" === "\000")
\x[0-9A- La séquence de caractères correspondant à cette expression rationnelle est un caractère, en notation hex
Fa-
f]{1,2}
27
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Caractères échappés
Séquence Signification
\u{[0-9A- La séquence de caractères correspondant à l'expression régulière est un point de code Unicode, qui sera
Fa-f]+} de caractères représentant le codepoint UTF-8
Syntaxe Heredoc ¶
Une troisième façon de délimiter une chaîne de caractères est la syntaxe Heredoc
: <<<. Après cet opérateur, un identifiant est fourni, suivi d'une nouvelle ligne.
La chaîne de caractères en elle-même vient ensuite, suivie du même identifiant pour
fermer la notation.
L'identifiant de fin peut être indenté par des espaces ou tabulations, au quel cas
l'indentation sera retirée de toutes les lignes dans la chaîne de caractères doc.
Antérieur à PHP 7.3.0, l'identifiant de fin doit commencer à la première colonne de la
ligne.
De plus, l'identifiant doit suivre les mêmes règles que n'importe quel autre libellé PHP
: il ne doit contenir que des caractères alphanumériques et des soulignés, et doit
commencer par un caractère non numérique ou un souligné ("underscore").
<?php
// no indentation
echo <<<END
a
b
c
\n
END;
// 4 spaces of indentation
echo <<<END
a
b
c
END;
28
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
date
(PHP 4, PHP 5, PHP 7, PHP 8)
Description ¶
date(string $format, ?int $timestamp = null): string
Retourne une date sous forme d'une chaîne, au format donné par le
paramètre format, fournie par le paramètre timestamp (horodatage Unix) ou la date
et l'heure courantes si aucun timestamp n'est fourni. En d'autres termes, le
paramètre timestamp est optionnel et vaut par défaut la valeur de la fonction time().
Avertissement
timestamp
Valeurs de retour ¶
Retourne une date formatée. Si une valeur non numérique est utilisée dans le
paramètre timestamp, false sera retourné et une erreur de niveau E_WARNING est
émise.
Erreurs / Exceptions ¶
Historique ¶
Version Description
Exemples ¶
<?php
// Définit le fuseau horaire par défaut à utiliser.
29
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
date_default_timezone_set('UTC');
<?php
// Affichage de quelque chose comme : Wednesday the 15th
echo date('l \t\h\e jS');
?>
Il est possible d'utiliser date() et mktime() ensemble pour générer des dates dans le
futur ou dans le passé.
<?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
?>
Note:
Cette méthode est plus sûre que simplement ajouter ou retrancher le nombre de
secondes dans une journée ou un mois à un timestamp, à cause des heures d'hiver
et d'été.
Voici maintenant quelques exemples de formatage avec date(). Notez que vous
devriez échapper tous les autres caractères, car s'ils ont une signification spéciale,
ils risquent de produire des effets secondaires indésirables. Notez aussi que les
versions futures de PHP peuvent attribuer une signification à des lettres qui sont
actuellement inertes. Lorsque vous échappez les caractères, pensez à utiliser des
guillemets simples, pour que les séquences \n ne deviennent pas des nouvelles
lignes.
30
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<?php
// Aujourd'hui, le 10 Mars 2001, [Link] pm, Fuseau horaire
// Mountain Standard Time (MST)
Pour formater des dates dans d'autres langues, IntlDateFormatter::format() peut être
utilisé à la place de date().
include ¶
(PHP 4, PHP 5, PHP 7, PHP 8)
Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun n'est fourni,
l'include_path sera vérifié. Si le fichier n'est pas trouvé dans
l' include_path, include vérifiera dans le dossier du script appelant et dans le dossier
de travail courant avant d'échouer. L'instruction include émettra E_WARNING si elle ne
peut trouver le fichier; ce comportement est différent de require, qui émettra E_ERROR.
Notez que include et require vont lancer des erreurs de type E_WARNING, si le fichier
n'est pas accessible, avant de lancer une erreur de type E_WARNING ou E_ERROR,
respectivement.
Si un chemin est défini, absolu (commençant par une lettre de lecteur suivie
de \ pour Windows, ou / pour Unix/Linux) ou relatif (commençant par . ou ..),
31
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
l'include_path sera ignoré. Par exemple, si un nom de fichier commence par ../,
PHP cherchera dans le dossier parent pour y trouver le fichier spécifié.
Pour plus d'informations sur la façon dont PHP gère les fichiers inclus ainsi que le
chemin d'inclusion, reportez-vous à la documentation relative à l'include_path.
Lorsqu'un fichier est inclus, le code le composant hérite de la portée des variables de
la ligne où l'inclusion apparaît. Toutes les variables disponibles à cette ligne dans le
fichier appelant seront disponibles dans le fichier appelé, à partir de ce point.
Cependant, toutes les fonctions et classes définies dans le fichier inclus ont une
portée globale.
[Link]
<?php
$couleur = 'verte';
$fruit = 'pomme';
?>
[Link]
<?php
include '[Link]';
?>
Si l'inclusion intervient à l'intérieur d'une fonction, le code inclus sera alors considéré
comme faisant partie de la fonction. Cela modifie donc le contexte de variables
accessibles. Une exception à cette règle : les constantes magiques sont analysées
par l'analyseur avant que l'inclusion n'intervienne.
<?php
function foo()
{
global $couleur;
include '[Link]';
32
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
?>
Il est important de noter que lorsqu'un fichier est include ou require, les erreurs
d'analyse apparaîtront en HTML tout au début du fichier, et l'analyse du fichier parent
ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier doit être
placé entre les balises habituelles de PHP.
Si les gestionnaires d'inclusion d'URL sont activés dans PHP, vous pouvez localiser
le fichier avec une URL (via HTTP ou bien avec un gestionnaire adapté : voir Liste
des protocoles et des gestionnaires supportés pour une liste des protocoles), au lieu
d'un simple chemin local. Si le serveur distant interprète le fichier comme du code
PHP, des variables peuvent être transmises au serveur distant via l'URL et la
méthode GET. Ce n'est pas, à strictement parler, la même chose que d'hériter du
contexte de variable. Le fichier inclus est en fait un script exécuté à distance, et son
résultat est inclus dans le code courant.
<?php
// Ne fonctionne pas : [Link] n'a pas été traité par [Link] comm
e du PHP
include '[Link]
// Réussi
include '[Link]
?>
require ¶
(PHP 4, PHP 5, PHP 7, PHP 8)
require est identique à include mis à part le fait que lorsqu'une erreur survient, il
produit également une erreur fatale de niveau E_COMPILE_ERROR. En d'autres termes,
il stoppera le script alors que include n'émettra qu'une alerte de niveau E_WARNING, ce
qui permet au script de continuer.
33
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Les Formulaires
EXEMPLE DE FORMULAIRE
35
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<!DOCTYPE html>
<html>
<head>
<title>Test méthode POST</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-
scale=1.0" />
</head>
<body> <!-- Corps de la page -->
<form action="[Link]" method="POST"> <!-- Début du
formulaire -->
<!-- Liste déroulante -->
<select name="titre">
<option>Mlle</option><option selected>Mme</option><option>M.</
option>
</select>
<!-- Zones de texte -->
<label for="nom"> Nom
: </label><input type="text" name="nom" id="nom" placeholder="
Entrez votre nom" /><br/><br/>
<label for="prenom">Prénom
: </label><input type="text" name="prenom" id="prenom" value="
Prénom par défaut" /><br/><br/>
<!-- Bouton radio -->
<label for="sexe">Sexe : </label>
<input type="radio" name="sexe" id="sexe" value="H" checked />
Masculin
<input type="radio" name="sexe" value="F" /> Féminin
<br/><br/>
<!-- Slider -->
<label for="age">Age : 1 </label>
<input type="range" name="age" id="age" min="1" max="99" step=
"1" value="18" /> 99
<br/><br/>
<!-- Case à cocher -->
<input type="checkbox" name="bDebutant" checked="checked" /> J
e débute en PHP<br/><br/>
<!-- Bouton -->
<input type="submit" name="btOK" value="OK">
</form> <!-- Fin du formulaire -->
</body>
</html>
Traitement du formulaire
Comment accéder aux valeurs qui ont été saisies
dans le fomulaire ?
36
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<?php
if($_POST) {
echo 'Contenu de la variable $_POST : >';
print_r($_POST);
}
?>
if($_POST) {
if($_POST['nom']!='') {
echo "<br/><br/>Bonjour " . $_POST['titre'] . "
" . $_POST['nom'] . "!<br/>";
echo "Je peux vous appeler " . $_POST['prenom']
. "<br/><br/>";
if(isset($_POST['bDebutant'])) {
echo "C'est une bonne idée de commencer à apprendre à
programmer en PHP !<br/><br/>";
}
else {
if($_POST['sexe']=='H') {
$mot = "débutant";
}
else {
$mot = "débutante";
}
echo "Comme vous n'êtes pas " . $mot . " vous pouvez passer
directement au mini-projet !<br/><br/>";
}
}
}
37
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
LES SESSIONS
LES SEDSSIONS
Depuis PHP4, on entend beaucoup parler de sessions. De nombreuses personnes utilisant PHP
ignorent encore ce qu'elles sont et à quoi elles servent. D'autres, en revanche, ne savent pas les
utiliser à bon escient. Ce tutoriel est une approche à la fois théorique et pratique des sessions. Elles
seront présentées au moyen d'un exemple simple tout au long de ce cours. Il s'agit d'un espace de
site sécurisé par authentification.
PHP introduit nativement une unique fonction permettant de démarrer ou de continuer une session.
Il s'agit de session_start(). Cette fonction ne prend pas de paramètre et renvoit toujours true. Elle
vérifie l'état de la session courante. Si elle est inexistante, alors le serveur la crée sinon il la poursuit.
<?php
session_start();
?>
Dans le cas d'une utilisation des sessions avec les cookies, la fonction session_start() doit
obligatoirement être appellée avant tout envoi au navigateur sous peine de voir afficher les fameuses
38
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
erreurs :
"Cannot modify header information - headers already sent by ..." ou "Cannot send
session cookie - headers already sent by ...". Cela est du au fait que PHP ne peut plus
envoyer de cookie à l'utilisateur car il y'a déjà eu une sortie au navigateur (echo(), print(), espace
blanc, tag html...).
Note : il faut appeller session_start() sur chaque page utilisant le système de session.
Le tableau $_SESSION
Lorsqu'une session est créée, elle est par défaut vide. Elle n'a donc aucun intérêt. Il faut donc lui
attribuer des valeurs à sauvegarder temporairement. Pour cela, le langage PHP met en place le
tableau superglobal $_SESSION. Le terme superglobal signifie que le tabeau a une visibilité
maximale dans les scripts. C'est à dire que l'on peut y faire référence de manière globale comme
locale dans une fonction utilisateur sans avoir à le passer en paramètre. Le tableau $_SESSION peut-
être indexé numériquement mais aussi associativement. En règle générale, on préfère la seconde
afin de pouvoir donner des noms de variables de session clairs et porteurs de sens.
L'écriture de session
Pour enregistrer une nouvelle variable de session, c'est tout simple. Il suffit juste d'ajouter un couple
clé / valeur au tableau $_SESSION comme l'illustre l'exemple suivant.
<?php
// Démarrage ou restauration de la session
session_start();
// Ecriture d'une nouvelle valeur dans le tableau de session
$_SESSION['login'] = 'Dupond';
?>
Le tableau $_SESSION, qui était vide jusqu'à présent, s'est agrandit dynamiquement et contient
maintenant une valeur (Dupond) à la clé associative login. Une variable de session est alors créée.
Note de rappel : à place de la chaîne de caractères « Dupond », nous aurions pu
mettre un nombre, un booléen ou encore un tableau par exemple.
Après l'écriture, c'est au tour de la lecture. Il n'y a rien de plus simple. Pour lire la valeur d'une variable
de session, il faut tout simplement appeler le tableau de session avec la clé concernée. L'exemple ci-
dessous illustre tout ça.
<?php
// Démarrage ou restauration de la session
session_start();
// Lecture d'une valeur du tableau de session
echo $_SESSION['login'];
?>
Cette instruction aura pour effet d'afficher à l'écran la chaîne de caractères Dupond.
39
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
Comme cela a été évoqué plus haut, le serveur détruit lui même la session au bout d'un certain temps
si la session n'a pas été renouvellée. En revanche, il est possible de forcer sa destruction au moyen
de la fonction session_destroy(). Cela permet par exemple aux webmasters de proposer une page
de déconnexion aux membres loggués à leur espace personnel. Cependant, l'utilisation de
session_destroy() seule n'est pas très "propre". Le code suivant présente une manière plus correcte
de mettre fin à une session.
<?php
// Démarrage ou restauration de la session
session_start();
// Réinitialisation du tableau de session
// On le vide intégralement
$_SESSION = array();
// Destruction de la session
session_destroy();
// Destruction du tableau de session
unset($_SESSION);
?>
Pour être convaincu de la destruction de la session, il suffit juste d'essayer d'afficher le contenu du
tableau de session au moyen de la fonction print_r().
Une session ne reste ouverte que pendant un certain temps. Tout au plus ce sera celle indiquée par
la directive session.gc_maxlifetime du [Link], entre deux clics consécutifs du client. Il est
recommandé de ne pas augmenter la valeur inscrite par défaut. Mais pourquoi ? Tout simplement
parceque si la session à une durée de vie plus importante, on s'expose à des risques de piratage
par vol de session notamment (cf: voir les liens annexes en fin de tutoriel pour plus d'informations).
Pour les mêmes raisons de sécurité, il est conseillé de configurer le serveur de la façon suivante :
session.use_cookies 1
session.use_only_cookies 1
session.use_trans_sid 0
Cette configuration implique néanmoins une restriction totale pour les personnes n'acceptant pas les
cookies. Ci-dessous, la signification dans le même ordre des 3 lignes de configuration précédentes.
L'identifiant de session est transmis par un cookie.
Seul le cookie peut transmettre l'identifiant de session.
Le PHPSESSID transmis dans l'url est strictement refusé.
Le présent chapitre introduit un cas concret d'utilisation des sessions. Il s'agit d'un accès restreint
basique. Seul un utilisateur n'est autorisé à être loggué mais cet exemple est à la base de la création
d'un espace membre. C'est exactement la même chose. Pour réaliser tout ça, nous aurons besoin de
2 fichiers : le formulaire accompagné de son script de login, et la page protégée. Commençons par le
formulaire de login. Le code étant commenté, il n'y aura pas plus d'explications.
40
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<?php
// Definition des constantes et variables
define('LOGIN','toto');
define('PASSWORD','tata');
$errorMessage = '';
41
SEPTEMBRE 2022 ENSEIGNANT : Daouda MEITE
<label for="password">Password :</label>
<input type="password" name="password" id="password" value="" />
<input type="submit" name="submit" value="Se logguer" />
</p>
</fieldset>
</form>
</body>
</html>
<?php
// On prolonge la session
session_start();
// On teste si la variable de session existe et contient une valeur
if(empty($_SESSION['login']))
{
// Si inexistante ou nulle, on redirige vers le formulaire de login
header('Location: [Link]
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xmlns="[Link] xml:lang="fr">
<head>
<title>Administration</title>
</head>
<body>
<?php
// Ici on est bien loggué, on affiche un message
echo 'Bienvenue ', $_SESSION['login'];
?>
</body>
</html>
Petite explication : pour protéger chacune des pages de l'administration, il faut absolument ajouter
en tête de fichier le premier script entièrement. Celui-ci redirige instantanément l'utilisateur s'il n'est
pas convenablement loggué. Sinon il affiche la page Web.
42