Développement Web
coté serveur
Introduction au langage PHP
2022
1
PHP: Langage de script pour le Web
▪ Qu’est-ce que PHP ?
◼ Langage de script. Utilisé coté serveur
◼ Acronyme récursif : PHP: Hypertext Preprocessor
◼ Créé en 1994-1995 par Rasmus Lerdorf
◼ Extension utilisée sur certains serveurs Web (77.3%)
◼ Langage multi plate-forme (UNIX / Windows…)
◼ Open Source
◼ Versions actuelles (source w3techs.com) :
▪ PHP4 (0,2% en sept 2022)
▪ PHP5 (23,4% en sept 2022)
▪ PHP7 (71,5% en sept 2022)
▪ PHP8 (4,8 % en sept 2022)
2
PHP: Langage de script pour le Web
% Utilisation des versions PHP en 2020 3
Utilité et utilisation de PHP
▪ Création de pages HTML « dynamiques »,
fabriquées à la volée, construite à la demande
▪ Interface entre un serveur Web et des bases de
données (accès à plus 20 SGBD)
▪ Création d’applications Web
4
Principales fonctionnalités de PHP
▪ Manipulation de chaînes et tableaux
▪ Calendrier / dates / heures
▪ Fonctions mathématiques
▪ Accès au système de fichiers (create, open,
read, write, delete)
▪ Manipulation d’images
▪ HTTP / FTP / IMAP
▪ Bases de données (Oracle, MySQL, …)
▪ XML, JSON
▪ …
5
Fonctionnement de PHP
Requête
Rendu
Exécution
Fermeture
Envoi du HTTP
Localisation
Connexion
graphique
du
de
sur
de
du du
code
lale
résultatla
codeclient
connexion
serveur
des (hello.php)
ressource
PHP
au PHP
données
client(port
dans80)
le fichier
= réponse HTTP Client
GET /hello.php HTTP/1.0
Navigateur
Réseau •HTML
•JavaScript
Protocole HTTP •CSS
Exécution d’un programme sur le serveur
<html>
Construction de la réponse
<head>
Serveur
<title>Hello</title> <?php
</head> echo <<<HTML hello.php
Serveur Web
<body>Hello world</body>.html <html>
</html> .php <head>
.jpg <title>Hello</title>
Module PHP </head>
<body>Hello world</body>
MySQL </html>
HTML;
6
Fonctionnement de PHP
Client Serveur
1. Connexion TCP sur le serveur (port 80)
2. Requête HTTP du client (mon_fichier.php)
3. Localisation de la ressource
4. Exécution du code PHP
5. Envoi du résultat de l’exécution au client
= réponse HTTP
6. Fermeture de la connexion
7. Rendu graphique des données (HTML, image, …)
7
Installation de PHP
Pour installer PHP, on peut utiliser les outils :
8
Programme en PHP
Un script PHP est exécuté sur le serveur et le résultat HTML brut est renvoyé au
navigateur.
L'extension de fichier par défaut pour les fichiers PHP est .php
Un fichier PHP contient normalement des balises HTML et du code de script
PHP.
Un script PHP commence par <?php et se termine par ?>
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
9
Eléments de syntaxe PHP
▪ La syntaxe de PHP ressemble à celle de famille
"C" (C, C++, Java, …)
▪ Chaque instruction se termine par ;
▪ les noms de variables sont sensibles à la casse!
▪ Commentaires:
/* jusqu’au prochain */
// jusqu’à la fin de la ligne
# jusqu’à la fin de la ligne
10
Les variables et les types de données
▪ Tout identificateur commence par "$"
▪ Les affectations sont réalisées grâce à "="
◼ Numérique entier: 12 ou réel: 1.54
◼ Chaîne: "Hello" ou ’Bonjour’
◼ Booléen: true, false
◼ Tableau: $tab[2]=12
◼ Objet
◼ NULL
▪ Le type d’une variable est dynamique et est
déterminé par la valeur qui lui est affectée
11
Typage faible. Exemple
// Pas de déclaration de variable
$test = 1.5 ; // Réel
$test = 12 ; // Entier
$test = array() ; // Tableau
$test = "10" ; // Chaîne
echo $test ; // 10
12
Typage automatique. Exemple
$nombre1 = 1.5 ; // Réel
$nombre2 = 12 ; // Entier
$chaine1 = "10" ; // Chaîne
$chaine2 = ‘Hello’ ; // Chaîne
$total =
$nombre1 + $nombre2 + $chaine1 + $chaine2 ;
1.5 12 "10" 'Hello'
13.5 10
23.5 0
echo $total ; // 23.5 Réel 23.5
13
Les chaînes de caractères
Substitution de variables dans les chaînes
▪ Guillemets simples
◼ $a='chaîne' ; chaîne
◼ $b='voici une $a'; voici une $a
▪ Guillemets doubles
◼ $a="chaîne" ; chaîne
◼ $b="voici une $a"; voici une chaîne
▪ Syntaxe HereDoc
◼ $a="chaîne" ; chaîne
◼ $b=<<<MARQUE_DE_FIN
voici une $a voici une chaîne
sur deux lignes ;-) sur deux lignes ;-)
MARQUE_DE_FIN;
14
Concaténation de chaînes
▪ Permet d’assembler plusieurs chaînes
▪ Réalisé grâce à l’opérateur point : .
"Bonjour " . "Mohamed"
→ vaut "Bonjour Mohamed"
$nb = 6*2 ;
"Acheter " . $nb . " jeux"
→ vaut "Acheter 12 jeux"
15
La commande echo
▪ Permet d’envoyer du texte au navigateur du
client (« écrire » la page au format HTML
résultant de l’interprétation de PHP)
◼ echo "Bonjour" ;
◼ $nom="Mohamed" ; echo "Bonjour $nom" ;
▪ Plus généralement, permet d’envoyer des octets
au navigateur du client
◼ Ficher HTML, XML, CSS, JavaScript, …
◼ Données d'une image
◼ Contenu d'un ficher PDF, Flash, etc.
16
Hello world !
Interprétation du code PHP sur le serveur
et transmission du résultat au client
<?php Serveur Navigateur
$debut = <<<HTML
<html> <html>
<head> <head>
<title>hello</title> <title>hello</title>
</head> </head>
<body>\n <body>
HTML; Hello world!
$corps = "Hello world!\n"; </body>
$fin = <<<HTML </html>
</body>
</html>
HTML;
/* Envoi au client */
echo $debut.$corps.$fin ;
Impossible de voir le code PHP depuis le navigateur !!
17
Les opérateurs arithmétiques
$a + $b Somme
$a - $b Différence
$a * $b Multiplication
$a / $b Division
$a % $b Modulo (Reste de la division entière)
18
Les opérateurs d’incrémentation
Retourne la valeur de $a puis augmente la
$a++
valeur de $a de 1
Augmente la valeur de $a de 1 puis
++$a retourne la nouvelle valeur de $a
Retourne la valeur de $a puis diminue la
$a--
valeur de $a de 1
Diminue la valeur de $a de 1 puis retourne
--$a la nouvelle valeur de $a
19
Les opérateurs de comparaison
$a == $b Vrai si égalité entre les valeurs de $a et $b
$a != $b Vrai si différence entre les valeurs de $a et $b
$a < $b Vrai si $a inférieur à $b
$a > $b Vrai si $a supérieur à $b
$a <= $b Vrai si $a inférieur ou égal à $b
$a >= $b Vrai si $a supérieur ou égal à $b
$a === $b Vrai si $a et $b identiques (valeur et type)
$a !== $b Vrai si $a et $b différents (valeur ou type)
20
Les opérateurs logiques
[Expr1]and [Expr2] Vrai si [Expr1] et [Expr2] sont vraies
[Expr1] && [Expr2] idem
[Expr1] or [Expr2] Vrai si [Expr1] ou [Expr2] sont vraies
[Expr1] || [Expr2] idem
Vrai si [Expr1] ou [Expr2] sont vraies
[Expr1] xor [Expr2]
mais pas les deux
! [Expr1] Vrai si [Expr1] est non vraie
21
Les opérateurs sur bits
$a & $b ET binaire
$a | $b OU binaire
$a ^ $b XOR binaire
~ $a Inversion bit à bit
$a << $b $a décalé à gauche de $b rangs
$a >> $b $a décalé à droite de $b rangs
22
Précédence des opérateurs
Opérateurs
new
[
++ --
! ~ - (int) (float) (string) (array) (object) @
*/%
+-.
<< >>
< <= > >=
== != === !==
&
23
Précédence des opérateurs
Opérateurs
^
|
&&
||
? :
= += -= *= /= .= %= &= |= ^= <<= >>=
and
xor
or
En cas de doute,
utilisez les parenthèses ;-)
24
Structure de contrôle Si…Alors…Sinon…
if (condition)
{
/* Bloc d’instructions exécuté si la
condition est vraie */
}
[else
{
/* Bloc d’instructions exécuté si la
condition est fausse */
}]
25
Structure de contrôle Tant que… faire…
while (condition)
{
/* Bloc d’instructions répété tant que la
condition est vraie */
}
do {
/* Bloc d’instructions exécuté une fois
puis répété tant que la condition est
vraie */
} while (condition) ;
26
Structure de contrôle Tant que… faire…
for(avant; condition; fin_chaque_itération)
{ /* Bloc d’instructions répété tant que la
condition est vraie */
}
Équivalent à:
avant ;
while (condition)
{ /* Bloc d’instructions répété tant que la
condition est vraie */
fin_chaque_itération ;
}
27
Structure de contrôle switch…
switch (val)
{
case v1:
instructions exécutées si val==v1
case v2:
instructions exécutées si val==v2
ou si val==v1
…
default:
instructions dans tous les cas
}
28
L’instruction break
Permet de sortir d’une structure de contrôle
switch (val)
{
case v1:
instructions exécutées si val==v1
break ; /* On sort du switch si val==v1 */
case v2:
instructions exécutées si val==v2
ou si val==v1
break ; /* On sort du switch si val==v2 */
…
default:
instructions exécutées dans tous les cas
si val!=v1 et val!=v2
}
29
Les tableaux
▪ Création / initialisation:
$tab1=array(12, "fraise", 2.5) ;
$tab2[] = 12 ; Clé Valeur
$tab2[] = "fraise" ; 0 12
$tab2[] = 2.5 ; 1 "fraise"
2 2.5
$tab3[0] = 12 ;
$tab3[1] = "fraise" ;
$tab3[2] = 2.5 ;
30
Les tableaux « à trous »
▪ Les éléments du tableaux ne sont pas forcement
d’indices consécutifs :
Clé Valeur
$tab4[0] = 12 ; 0 12
$tab4[1] = "fraise" ; 1 "fraise"
$tab4[2] = 2.5 ; 2 2.5
$tab4[5] = "el5" ; 3
4
5 "el5"
▪ Comment parcourir de tels tableaux ?
31
Les tableaux « à trous » (suite)
Parcours classique : 4
for ($i=0; $i < sizeof($tab4); $i++)
{ echo "tab[$i]: "
. $tab4[$i] . "<BR>\n";
} Clé Valeur
0 12
1 "fraise"
2 2.5
3
4
? 5 "el5"
32
Structure de contrôle Pour chaque…
foreach ($tableau as $element)
{
/* Bloc d’instructions répété pour
chaque élément de $tableau */
/* Chaque élément de $tableau est
accessible grâce à $element */
}
33
Parcours de tableau : foreach
PHP … HTML
… Val:12<br>
$tab4[0] = 12 ; Val:fraise<br>
$tab4[1] = "fraise" ; Val:2.5<br>
Val:el5<br>
$tab4[2] = 2.5 ;
…
$tab4[5] = "el5" ;
foreach($tab4 as $v)
{ Navigateur
echo "Val: $v<br>\n";
}
…
34
Tableaux associatifs
▪ Tableaux dont l’accès aux éléments n’est plus
réalisé grâce à un index (0,1,…) mais grâce à
une clé de type entier ou chaîne.
▪ Exemples de clés:
$tab['un'] = 12 ;
$tab[205] = "bonjour" ;
$tab["la valeur"] = 3.0 ;
▪ Création
$tab = array(cle1 => val1,
cle2 => val2,
…);
35
Tableaux associatifs - Exemples
$tab5['un'] = 12 ;
$tab5['trois'] = "fraise" ;
Clé Valeur
$tab5["deux"] = 2.5 ;
"un" 12
$tab5[42] = "el5" ;
"trois" "fraise"
"deux" 2.5
42 "el5"
$tab6 = array('un' => 12,
'trois' => "fraise",
"deux" => 2.5,
42 => "el5") ;
36
Structure de contrôle Pour chaque…
foreach($tableau as $cle => $element)
{
/* Bloc d’instructions répété pour
chaque élément de $tableau */
/* Chaque élément de $tableau est
accessible grâce à $element */
/* La clé d’accès à chaque élément est
donnée par $cle */
}
37
Parcours de tableau
<?php
$html = <<<HTML
<html>
<head><title>foreach clé</title>
</head>
<body>
HTML;
$tab6 = array('un' => 12,
'deux' => "fraise",
"trois" => 2.5,
"quatre" => "el5") ;
foreach ($tab6 as $cle => $val)
{
$html .= "tab[$cle]: $val<br>\n" ;
}
echo $html . "</body>\n</html>" ;
?>
38
Exemple de génération de code HTML
<?php
$html = <<<HTML
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Boucle</title>
</head>
<body>
HTML;
for ($i=1; $i<20; $i++) {
$html .= "Le serveur compte... "
. $i . "<br>\n" ;
}
$html .= <<<HTML
</body>
</html>
HTML;
echo $html ;
39
Traitement des données de formulaires
▪ PHP permet de traiter les données saisies grâce
à un formulaire HTML si le champ ACTION du
formulaire désigne une page PHP du serveur.
▪ Après récupération par le serveur Web, les
données sont contenues dans l'une des
variables superglobales de type tableau
associatif $_GET ou $_POST (ou $_REQUEST).
▪ La valeur peut être trouvée grâce à une clé qui
porte le même nom que le champs du formulaire
de la page HTML de saisie.
40
Traitement des données de formulaires
Client
Réseau Navigateur
nomPers=robert•HTML
•JavaScript
•CSS
<html>
<head>
Serveur
<title>bonjour</title> nomPers
</head>
Serveur Web
<body> <?php
Bonjour robert ! $html = <<<HTML
</body> <html>
</html> <head><title>bonjour</title></head>
Module PHP <body>
HTML;
robert
$html .= "Bonjour ".$_GET['nomPers']." !\n" ;
echo $html . "</body>\n</html>" ;
41
Exemple – Formulaire HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>formulaire</title>
</head>
<body>
<form action="valide1.php" method="get">
Nom: <input type="text" name="nomPers">
<input type="submit" value="Envoyer">
</form>
</body>
</html>
42
Exemple – Traitement en PHP
<?php
$html = <<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Validation</title> $_GET['nomPers']
</head> est-il défini ?
<body>
HTML;
if (isset($_GET['nomPers'])) $_GET['nomPers']
{
if (!empty($_GET['nomPers'])) est-il vide ?
{
$html .= "Vous avez saisi '"
.$_GET['nomPers']."'\n" ;
}
else
$html .= "Aucune valeur saisie\n";
}
else
$html .= "Utilisation incorrecte\n" ;
echo $html . "</body>\n</html>" ;
43
Formulaires contenant des champs « SELECT »
44
Formulaires contenant des champs
« SELECT unique»
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="valide3.php" method="get">
Choisissez des fruits:
<select name="sel">
<option>Fraise
<option>Pomme
Envoyer <option>Poire
<option>Banane
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
</body> valide3.php?sel=Pomme
</html>
45
Formulaires contenant des champs
« SELECT multiple»
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="valide3.php" method="get">
Choisissez des fruits:
<select name="sel" multiple>
<option>Fraise
<option>Pomme
<option>Poire
Envoyer <option>Banane
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form>
</body> valide3.php?sel=Pomme&sel=Poire ???
</html>
46
Formulaires contenant des champs
« SELECT multiple»
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form action="valide3.php" method="get">
Choisissez des fruits:
<select name="sel[]" multiple>
<option>Fraise
<option>Pomme
Envoyer <option>Poire
<option>Banane
<option>Cerise
</select>
<input type="submit" value="envoyer">
</form> valide3.php?sel%5B%5D=Pomme&sel%5B%5D=Poire
</body>
</html> valide3.php?sel[]=Pomme&sel[]=Poire
47
Traitement des données des champs « SELECT »
<?php
$html = <<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Liste de fruits</title>
</head> $_GET[‘sel']
<body> est un tableau
HTML;
if (isset($_GET['sel']) && !empty($_GET['sel']))
{/* La variable $_GET['sel'] est définie
et elle n'est pas vide */
foreach($_GET['sel'] as $fruit)
$html .= "Vous avez choisi $fruit<br>\n" ;
}
else
$html .= "Vous n'avez pas choisi de fruit\n" ;
echo $html . "</body>\n</html>" ;
48
Résultat
49
Formulaires contenant des champs « CHECKBOX »
50
Formulaires contenant des champs « CHECKBOX »
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Formulaire de saisie des fruits</title>
</head>
<body>
<form name="formu" action="valide3.php" method="get">
Choisissez des fruits :<br>
<input type="checkbox" name="sel[]" value="Fraise">Fraise<br>
<input type="checkbox" name="sel[]" value="Pomme" >Pomme <br>
<input type="checkbox" name="sel[]" value="Poire" >Poire <br>
<input type="checkbox" name="sel[]" value="Banane">Banane<br>
<input type="checkbox" name="sel[]" value="Cerise">Cerise<br>
<input type="submit" value="Envoyer">
</form>
</body>
</html>
51
Résultat
52
Références
$a = 12 ;
$b = $a ; $a 84
12
$c = &$a ; $b "coucou"
12
$b = "coucou" ; $c "hello"
$c = 84 ;
echo "\$a : $a\n" ; $a : 84
echo "\$b : $b\n" ; $b : coucou
echo "\$c : $c\n" ; $c : 84
unset($c) ;
$c = "hello" ;
53
Fonctions utilisateur
▪ Description d’une fonctionnalité dépendant
éventuellement de paramètres et retournant
éventuellement un résultat
▪ Définition
function moyenne($a,$b)
{
return ($a+$b)/2. ;
}
▪ Utilisation
$resultat = moyenne(2,4) ;
echo $resultat ; // vaut 3
54
Fonctions utilisateur
▪ Valeur de retour
function moyenne($a,$b)
{ … }
Typage faible de PHP :
Aucune information
▪ Arguments
function moyenne( $a, $b)
{ … }
Typage faible de PHP :
Aucune information
55
Mode de passage des arguments (types natifs)
<?php
function permutation($x, $y) {
echo "permutation..." ;
$t = $x ;
$x = $y ;
Permutation impossible :
$y = $t ; Passage des arguments
} des fonctions par valeur
$a = 12 ;
$b = 210 ;
echo "\$a = $a" ; $a = 12
echo "\$b = $b" ; $b = 210
permutation($a, $b) ; permutation...
echo "\$a = $a" ; $a = 12
echo "\$b = $b" ; $b = 210
?>
56
Mode de passage des arguments (types natifs)
<?php
function permutation(&$x, &$y) {
echo "permutation..." ;
$t = $x ;
$x = $y ;
Permutation
$y = $t ;
réussie
}
$a = 12 ;
$b = 210 ;
echo "\$a = $a" ; $a = 12
echo "\$b = $b" ; $b = 210
permutation($a, $b) ; permutation...
echo "\$a = $a" ; $a = 210
echo "\$b = $b" ; $b = 12
?>
57
Arguments par défaut des fonctions
▪ Valeur par défaut d’un argument s’il n’a pas été
défini lors de l’appel de la fonction
function bonjour($nom="inconnu")
{ echo "Bonjour cher $nom" ; }
▪ Utilisation
bonjour() ;
Bonjour cher inconnu
bonjour("Mourad") ;
Bonjour cher Mourad
58
Définition de fonctions fréquemment utilisées
▪ Certaines fonctions sont utilisées dans plusieurs
scripts PHP
▪ Comment faire pour ne pas les définir dans
chacune des pages ?
▪ Utilisation de :
◼ include("fichier") ; //génère warning
◼ require("fichier") ; //génère error
◼ include_once("fichier") ;
◼ require_once("fichier") ;
▪ Permet d’inclure le contenu de fichier dans
le script courant
59
include et require
Fichier utilisation1.php
…
Fichier mafonction.php require("mafonction.php")
<? mafonction(true) ;
function mafonction($arg) …
{
if (isset($arg)) Fichier utilisation2.php
{
echo ("Vrai") ; …
} include("mafonction.php")
else …
{ $var=false ;
echo ("Faux") ; mafonction($var) ;
} …
}
?> Fichier utilisation3.php
…
require("mafonction.php")
…
60
Définition de constantes
<?php
define("ma_constante", "Bonjour à tous") ;
nom valeur
Définition d'une constante
echo ma_constante ;
?>
Utilisation de la constante
61
Gestion des erreurs
▪ Dans certains cas, il n’est ni possible ni utile de
poursuivre l’exécution du code PHP (variables
non définies, valeurs erronées, échec de
connexion, …)
▪ Arrêt brutal de l’exécution du code:
◼ die(message)
◼ exit(message)
Envoie message au navigateur et termine
l’exécution du script courant
62
Gestion des erreurs – (Mauvais) Exemple
<?php PHP <html> HTML
$html = <<<HTML <head>
<html> <title>die-exit</title>
<head> </head>
<title>die-exit</title> <body>
</head> problème val
<body>
HTML;
if (!isset($val)) { HTML non valide…
die($html."problème val") ;
/* Au delà de ce point, Navigateur
fin du script */
} problème val
$html .= <<<HTML
Choix: $val
</body>
</html>
63
Gestion de l'affichage des erreurs
▪ int error_reporting ( [int level] )
Constante
Ancien niveau d'erreur E_ERROR
E_WARNING
Sur un serveur en E_PARSE
Débogage
E_NOTICE
production, toute
E_CORE_ERROR
erreur affichée
E_CORE_WARNING
donne des indices sur E_COMPILE_ERROR
les scripts et rend le E_COMPILE_WARNING
site vulnérable E_USER_ERROR
E_USER_WARNING
php.ini E_USER_NOTICE
E_ALL
display_errors boolean
E_STRICT
64
Opérateur de contrôle d'erreur
$v = file("dummy.txt") Fichier absent
or die("Problème de lecture") ;
Warning: file(dummy.txt): failed to open
stream: No such file or directory in
dummy.php on line 68
Problème de lecture
$v = @file("dummy.txt")
or die("Problème de lecture") ;
Problème de lecture
65