introduction à phpimss-atenciam/itw/5-php.pdf · 2020. 2. 10. · introduction php : – personal...

58
Introduction à PHP

Upload: others

Post on 28-Aug-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Introduction à PHP

Page 2: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Introduction

● PHP :– Personal Home Page (le premier)

– PHP : Hypertext Preprocessor (l'officiel)

– People Hate Perl (le non officiel ;-))

● Langage de script côté serveur

– Comme ASP (Microsoft), JSP (Java) …● Supporte des bases de données

– Interface d'abstraction : PDO (PHP Data Objects)

– Extensions spécifiques : MySQL, PostgreSQL, Oracle...

● Logiciel open source

● Nombreux « frameworks » : Laravel, Symfony...

Page 3: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Historique

● Conçu en 1994 par Rasmus Lerdof

● PHP 3 : 1997

● PHP 4 : 2000 (migration sur le moteur d'analyse Zend, meilleures performances, support d'un plus grand nombre d'extensions)

● PHP 5 : 2004 (version 2 du moteur Zend, support de la programmation objet)

● PHP 6 : jamais sortie !

● PHP 7 : 2015 (version 3 du moteur Zend)

– Actuellement en version 7.3.11

Page 4: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Principe

● Page générée dynamiquement– Une majorité de la page est statique

– Une faible partie est le résultat d'un programme

● PHP :– Un peu de code embarqué dans une page HTML

– Code interprété par le serveur

– N'est pas visible par le client (ne reçoit que le HTML produit)

Page 5: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Principe

● Page générée dynamiquement côté serveur

Page 6: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Principe

● PHP extension d'un serveur HTTP– Apache, IIS …

● Solutions intégréespour Apache + PHP

XAMPPhttp://www.apachefriends.org/en/xampp.html

WAMPhttp://www.wampserver.com/en/

EasyPHPhttp://www.easyphp.org

Page 7: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Quelques sites sur PHP

● www.php.net : site officiel de php

– www.php.net/nom_fonction Pour avoir doc sur une fonction.

● www.php.index : sites en français, news exemples, forum de discussion

● www.phpfrance.com : idem

Page 8: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Généralités

● Extension du fichier :– .php pour PHP 4, PHP 5, PHP 7

– .php3 pour PHP 3

– Utilisé par Apache pour interpréter la page

● Délimiteur– <?php .... ?>

– <? ... ?> autorisé si dans php.ini le paramètreshort_open_tag à on (emploi pas recommandé)

Page 9: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

La fonction echo

● Permet d'afficher une ou plusieurs chaînes -> inclure du texte dans la page HTML envoyée au serveur

Toute instruction doit se terminer par ';' (séparateur d'instructions) .

La fonction print() est similaire à echo()https://www.w3schools.com/php/php_echo_print.asp

Page 10: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Informations sur la configuration

● Fonctions phpinfo et phpversion

Page 11: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Commentaires

● // ou # : commentaire sur une ligne ou à la suite de l'instruction

● /* … */ : commentaire sur plusieurs lignes

Page 12: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

PHP sur la ligne de commandes

● Possible depuis PHP 4.3

– Ne nécessite pas de serveur web

– Utile par exemple pour scripts d'administration

P:\Cours4-PHP\Exemples>php -vPHP 5.3.0 (cli) (built: Jun 29 2009 21:25:23)Copyright (c) 1997-2009 The PHP GroupZend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

P:\Cours4-PHP\Exemples>php helloDate.php<html><head> <title> Heure </title> </head><body><p>Sur le serveur, il est actuellement09:17:20</p></body></html>

Page 13: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Variables PHP

● Utilisées pour stocker des valeurs● Identifiées par un nom

– $nomDeVariable

– nomDeVariable ● uniquement des caractères alphanumériques et le

tiret bas (A-z, 0-9, _)● sensible à la casse $toto ≠ $Toto

Page 14: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Variables PHP

● Variables « automatiques »– Pas de déclaration explicite

– Variable créée à la première affectation

– Type = type des données contenues● PHP convertit automatiquement vers le type de

données adéquat en fonction de sa valeur (langage faiblement typé)

Page 15: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Types de données

● Types scalaires (ne pouvant contenir qu'une valeur)

– Integer

– Float (aussi appelé double)

– String

– Boolean

● Types composés

– Array

– Object

● Types spéciaux

– NULL

– Resource

Page 16: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Exemples de variables de type scalaire

$reponse = 42; # integer$pi = 3.14159; # double

$encore = TRUE ; # boolean $verbe = "lire"; # string $phrase = "J'aime $verbe"; # string avec interprétation$phrase = 'It costs $100'; # string sans interprétation $ceci = $cela; # variable

$E = $m*$c*$c; # expression

Page 17: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Exemples de scalaires

Variablenon définie

Page 18: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Opérateurs

Opérateurs numériquesOpérateur Description

+ Addition

- Soustraction

* Multiplication

/ Division

% Modulo (reste de la division)

** Exponentiation

++ Pré ou post incrémentation

-- Pré ou post décrémentation

Opérateur Description

. Concatenation

.= Affectation concaténant

Opérateurs de chaînes

Opérateurs d'affectation

Opérateur Équivaut à

$a += $b $a = $a + $b

$a -= $b $a = $a - $b

$a *= $b $a = $a * $b

$a /= $b $a = $a / $b

$a %= $b $a = $a % $b

Page 19: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Opérateurs (suite)

Opérateurs de comparaison

Opérateur Description

== Teste l'égalité de deux valeurs.

!= ou <> Teste l'inégalité de deux valeurs.

=== Teste l'identité des valeurs et des types de deux expressions.

!== Teste la non-identité de deux expressions.

<, <=, >, >= Testent si le premier opérande est strictement inférieur, inférieur ou égal, strictement supérieur, supérieur ou égal au second, respectivement.

Opérateurs logiquesOpérateur Description

AND ou && Teste si les deux opérandes valent TRUE en même temps.

OR ou || Teste si l'un au moins des opérandes a la valeur TRUE.

XOR Teste si un et un seul des opérandes a la valeur TRUE.

! Opérateur unaire de negation, qui inverse la valeur de l'opérande.

Page 20: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Manipulation de scalaires

var_dump(var)…

boolean isset(var) renvoie True si var est affectéechaine gettype(variable) renvoie la chaîne décrivant le type de varboolean is_double(var) renvoie True si var est de type doubleboolean is_integer(var) renvoie True si var est de type entierboolean is_string(var) renvoie True si var est une chaîneboolean is_type(var, type) renvoie True si var est du type : type

affiche infos sur la variable (type et valeur)

Page 21: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Scalaires : booléens

● conversion automatique des valeurs si un opérateur, une fonction ou une structure de contrôle demandent un argument de type booléen

– les valeurs suivantes sont considérées comme FALSE :● l'entier 0 (zéro)● le nombre à virgule flottante 0.0 (zéro)● la chaîne vide, et la chaîne "0"● un tableau avec aucun élément● un objet avec aucun membre, ni variable (uniquement en

PHP 4)● le type spécial NULL (incluant les variables non définies)

– toute autre valeur est considérée comme TRUE

Page 22: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Instructions de contrôle et de boucleFonctions d'inclusion de code externe

● if, else, elseif/else if, switch… case● for, while, do… while, foreach● include() :

– inclusion d'un autre script

– warning si le script n'est pas présent

● require() :– inclusion d'un autre script

– erreur fatale si le script n'est pas présent

● include_once(), require_once()

Page 23: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Constantes

● PHP fournit la possibilité de définir constantes personnalisées en utilisant la fonction define()

● PHP dispose d'un ensemble de constantes prédéfinies utilisables dans tous les scripts, e.g.

– PHP_VERSION : version de PHP installée sur le serveur

– PHP_OS : Nom du système d'exploitation du serveur

– __FILE__ : Nom du fichier en cours d'exécution

– __LINE__ : Numéro de la ligne en cours d'exécution

<?php define("PI",3.1415926535); echo "La constante PI vaut ", PI;?>

Page 24: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Tableaux

● Tableau (array) : collection (liste d'éléments) ordonnée de couples clé/valeur

● Clé peut être

– Entier (tableau numérique)

– Chaîne (tableau associatif)

– Les deux (tableau mixte)● Les clés ne sont pas forcément consécutives ni

ordonnées

● La valeur associée à la clé peut être de n'importe quel type (si tableau → tableau multidimensionnel)

Page 25: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Tableaux

Tableau numérique(indices ordonnés consécutifs)

Tableau mixte Tableau multidimensionnel

Tableau numérique(indices non ordonnés non consécutifs)

Page 26: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Tableaux numériques

● Création

– Attribution automatique des index (entiers consécutifs en partant de 0)

● $tab1 = array("h", "1", "test");● $tab1 = ["h", "1", "test"] ; // depuis PHP 5.4

– Attribution manuelle des indexes (entiers au choix du programmeur)

● $tab2[0] = "h" ;$tab2[1] = "1" ;

● Des éléments peuvent être ajoutés dynamiquement

– $tab1[3] = "suite";

– $tab1[] = "fin"; // ajout en fin de tableau

● Test si $var est un tableau : boolean is_array($var);

Page 27: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Tableaux numériques

Page 28: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Tableaux associatifs

● Création :

– $tab["cle1"] = valeur1;

– $tab = array("cle1"=>valeur1,"cle2"=>valeur2)

● Comme pour tableaux numériques, possibilité d'ajouter des éléments dynamiquement

Page 29: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Parcours de tableaux

● Pour un tableau numérique à indices consécutifs : boucle for

● Problème si indices non consécutifs

– Initialisation du compteur ?

– On ne peut pas utiliser count dans la condition d'arrêt

– Incrémentation du compteur ?

Page 30: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Parcours de tableaux

● Un tableau maintient en interne un curseur permettant son parcours.

● Fonctions de parcours :

– reset($tab), end($tab), prev($tab), next($tab) : déplacent le curseur et retournent la valeur courante.

– current($tab) : retourne la valeur courante.

– key($tab) : retourne la clé de l’élément courant.

– each($tab) : retourne la paire (clé, valeur) courante du tableau et avance le curseur

Page 31: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Parcours de tableaux

● Fonctions de parcours (suite) :

– Attention aux risque d'erreurs si le tableau peut contenir des valeurs pouvant être interprétées comme la valeur booléenne False

– Mieux vaut utiliser each en liaison avec list

Page 32: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Parcours d'un tableau

● Structure de contrôle itératives classiques for, while– → connaissances nécessaires sur la nature du

tableau (numérique, associatif, plage des indices/clés...)

● Structure de parcours de tableau foreach– → pas besoin de connaissances particulières sur

la structure du tableau

Page 33: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Parcours d'un tableau

● foreach : deux syntaxesforeach (tableau as variable_valeur) { instructions}foreach (tableau as variable-clé => variable_valeur) { instructions}

Page 34: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Quelques fonctions

count($tab)reset($tab)end($tab)next($tab)

current($tab)

retourne le nombre d’éléments du tableau.place le pointeur interne sur le premier élément (et le retourne).place le pointeur interne sur le dernier élément (et le retourne).avance le pointeur interne sur l’element suivant (et le retourne).

prev($tab) recule le pointeur interne sur l’élément précédent (et le retourne).retourne l’élément courant.

explode($sep,$chaine) transforme une chaîne en tableau ($sep = séparateur).join($sep,$tab) transforme un tableau en chaîne de caractère ($sep = séparateur).

$tab = array("a", "b", "c");$c = count($tab); // $c vaut 3$res = end($tab); // $res vaut "c"$res = prev($tab); // $res vaut "b"$chaine = join(":",$tab); // $chaine vaut "a:b:c"$tab2 = explode(":", $chaine); // $tab2 == $tab

Page 35: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Fonctions● Possibilité de définir nos propres fonctions : fonctions utilisateur

● Déclaration

– function nomDeFonction([paramètres]) { // instructions;}

– nomDeFonction : chaîne de caractères (A-z, 0..9, _)

– paramètres : paramètres éventuels exprimés sous forme d'une liste de noms de variables séparé par ','

– instructions : ensemble des instructions qui composent la fonction

● Appel : nomDeFonction([valeurs des paramètres]) ;

● Le mot-clè return retourne l'argument qui lui est passé et termine immédiatement la fonction (il n'est pas obligatoire)

– function maFonction ($x,$y,...) { // code de définition de la fonction; return $var; // pas entre parenthèses}

Page 36: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Fonctions<?php

echo "tests sur les fonctions\n";

/** * Affiche le minimum de trois nombres distincts */function min3Nombres($n1, $n2, $n3) { if ($n1 == $n2 || $n1 == $n3 || $n2 == $n3) {

echo "les trois nombres doivent être distincts\n"; } elseif ($n1 < $n2) {

echo "le minimum est ".(($n1<$n3)?$n1:$n3)."\n"; } else { echo "le minimum est ",($n2<$n3)?$n2:$n3,"\n"; }}

$a = 10; $b=24; min3Nombres(14, $a,$a + 10 - $b);?>

<h1>Du HTML.....</h1>

<?php$c = 12;min3Nombres($a, $c,$b - $c);

?>

Fonction est utilisable n'importe où dans lescript où elle est définie

Pour utiliser une même fonction dans plusieurs scripts : la définir dans un fichier qui sera inclus dans les scripts où elle est nécessaire

min3Nombres(12,14,10);

Noms de fonctions insensibles à la casse, mais communément admis de respecter celle-ci

Fonction est utilisable n'importe où dans lescript où elle est définie

<=> MIN3Nombres(12,14,10);

Page 37: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Fonctions

● Par défaut : passage de paramètres par valeur

– Les paramètres formels sont des variables locales à la fonction initialisés avec les valeurs des paramètres effectifs => les modifications des paramètres à l'intérieur sont perdues à l'extérieur

<?php

function permut($v1, $v2){ $temp = $v1; $v1 = $v2; $v2 = $temp;}

$x=3; $y=4;echo "avant permut : \$x=$x \$y=$y \n";permut($x,$y);echo "après permut : \$x=$x \$y=$y \n";echo "isset(\$temp) : ", isset($temp)?"est définie":"n'est pas définie";

?>

Paramètres effectifs

Variable locale

Paramètres formels

Page 38: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Fonctions

● Possibilité de passer des paramètres par référence

– On peut passer une variable par référence à une fonction, de manière à ce que celle-ci puisse la modifier

– Pour qu'un paramètre soit passé par référence, ajouter un '&' devant lui dans la déclaration de la fonction

<?phpfunction permut(&$v1, &$v2){ $temp = $v1; $v1 = $v2; $v2 = $temp;}

$x=3; $y=4;echo "avant permut : \$x=$x \$y=$y \n";permut($x,$y);echo "après permut : \$x=$x \$y=$y \n";echo "isset(\$temp) : ", isset($temp)?"est définie":"n'est pas définie";

?>

Paramètres effectifs passés par référence automatiquement

Variable locale

Paramètres formels avec déclaration d'un passage par référence

Page 39: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Fonctions

● Paramètres avec valeurs par défaut – Possibilité d'indiquer une valeur par défaut pour un paramètre

nomParamètre = expression littérale

– Les paramètres avec valeur par défaut doivent être placés à la suite de tous les paramètres sans valeur par défaut

function trier(&$tab , $croissant=true){ $taille = count($tab); if ($croissant) { do { $taille= $taille - 1; $trie = true; for ($i = 0; $i < $taille; $i++) {

if ($tab[$i] > $tab[$i+1]) {permut($tab[$i],$tab[$i+1]);$trie = false;

} } } while (! $trie);} // end if

else { // tri par ordre décroissant

$debut = 0; do { $debut = $debut + 1; $trie = true; for ($i = $taille - 1; $i >= $debut; $i--) {

if ($tab[$i] > $tab[$i-1]) {permut($tab[$i],$tab[$i-1]);$trie = false;

} } } while (! $trie);

} // end else}

$tabEntiers = array(3,14,12,5,-4,-14,29);trier($tabEntiers,false);

$tabEntiers = array(3,14,12,5,-4,-14,29);trier($tabEntiers);

Page 40: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Portée et durée de vie des variables

● Portée d'une variable– Notion géographique

– Dans quelle partie du code la variable est-elle accessible ?

● Durée de vie– Notion temporelle

– Quand est ce que la variable existe ?

Page 41: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Variables globales

● Variable définie en dehors d'une fonction● Portée : toute la page et les pages incluses● Durée de vie : le temps de chargement de la page

<?php if (! isset($a)) { echo "la variable \$a n'est pas encore definie\n"; $a=1; } else { echo "la variable \$a est déjà définie et vaut $a\n";

} echo "maintenant \$a vaut $a\n";

$a = $a+1;?>

<h1>Plein de lignes HTML.....<h1/>

<?php echo "maintenant \$a vaut $a\n"; include("fichierInclude.php");echo "maintenant \$a vaut $a\n"; echo "maintenant \$b vaut $b\n";

?>

<?phpecho "\n\n--------début script inclus ---------\n";echo "la valeur de \$a est $a";$b = 14;$a = 12;echo "\n--------fin script inclus -----------\n\n";

?>

Page 42: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Variables locales

● Variable définie à l'intérieur d'une fonction● Portée : la fonction uniquement● Durée de vie : durée d'appel de la fonction

<?php

function test($v1) { $v2 = ++$v1; echo "dans la fonction \$v2 = $v2\n";} test(10);echo "après appel de la fonction \$v2 = $v2\n";

?>

Page 43: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Fonctions et variables globales

● Attention : différent des autres langages (comme JavaScript)● Pas d'accès automatique <?php

$a = 10;

function testGlobal() {

echo "dans la fonction \$a = $a\n";} testGlobal();

?>

● Déclaration explicite nécessaire pour accéder à la variable globale <?php

$a = 10;

function testGlobal() { global $a ; echo "dans la fonction \$a = $a\n";} testGlobal();

?>

Page 44: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Variables super globales● Variables prédéfinies● Portées globales● Accessibles directement dans les fonctions

– Pas besoin de les déclarer global $...

● Sont tableaux associatifs● Exemples :

– $GLOBALS, $_GET, $_POST, $_COOKIE, $_SERVER,...

Page 45: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Formulaires

● Accès aux variables des formulaires :– $_GET et $_POST

– Tableaux associatifs

● Exemple : – form.html

– traite.php

<form action="traite.php" method="GET"/> <input type=text name="adresse"> <input type="submit"></form>

L’adresse est <? echo $_GET['adresse'] ?>

Page 46: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Cookies 

● Déposer un cookie– Utilisation de la fonction prédéfinie setcookie

● Accèder aux cookies – par le tableau associatif super global $_COOKIE[]

– clé : nom du cookie, valeur : valeur du cookie

setcookie('monCookie','saValeur')

$_COOKIE['monCookie'] ==> 'saValeur'

Page 47: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Cookies

● La fonction setcookie

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

– name : nom du cookie (seul argument obligatoire)

– value : valeur du cookie

– expire : date d'expiration du cookie (timestamp Unix)

● exemple : time() + 3600 * 2 <=> date courante plus 2 heures

– path : chemin sur le serveur sur lequel le cookie sera disponible.

– domaine : domaine pour lequel le cookie est disponible

– secure : Indique si le cookie doit uniquement être transmis à travers une connexion sécurisée HTTPS

– httponly : si TRUE, le cookie n'est accessible que par le protocole HTTP (et plus par langages de scripts comme javascript)

– Le seul paramètre obligatoire est name. On peut aussi ignorer un argument en utilisant la chaîne vide ("") sauf pour expire (0).

Page 48: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Cookies

● La fonction setcookie (suite)

Les cookies sont placés dans l'en-tête de la réponse HTTP =>rien ne doit être envoyé sur la sortie standard avant appel à setcookie()

appeler setcookie avant toute balise HTML ou tout appel de fonction provoquant une sortie (echo, print...).

Page 49: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Cookies

● La fonction setcookie (suite)

– pour supprimer un cookie sur le client● appeler setcookie avec une valeur nulle

setcookie('monPetitcookie','hello',0,"/~atencia/CV"); // création du cookie

setcookie('monPetitcookie') ne supprime pas le cookie

● appeler setcookie avec une date d'expiration très petite ou dans le passé

setcookie('monPetitcookie',"",time()-3600);

setcookie('monPetitcookie',"");

si le cookie a été créé avec des attributs path et/ou domainil faut utiliser les même attributs pour le supprimer

setcookie('monPetitcookie','',0,"/~atencia/CV"); // suppression du cookie

Page 50: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Cookies

● exemple

<?php if (isset($_COOKIE['monPetitcookie'])) { setcookie('monPetitcookie',""); } else { setcookie('monPetitcookie','hello'); }?><html lang="fr"> <head> <meta charset="utf-8"/>

<title>Création/Supression de cookie</title> </head> <body> <h1>HELLO COOKIE!!</h1>

<?php if (isset($_COOKIE['monPetitcookie'])) {

echo "le cookie monPetitcookie (".$_COOKIE['monPetitcookie'].") a été reçu<br/>"; echo "on a demandé sa suppression en renvoyant cette page<br/>"; } else {

echo "il n'y a pas de cookie monPetitcookie sur le client<br/>";echo "on a demandé sa création en renvoyant cette page<br/>";

} ?>

</body></html>

helloCookie.php

1ère requêtehelloCookie.php

2ème requêtehelloCookie.php

3ème requêtehelloCookie.php

4ème requêtehelloCookie.php

...

Page 51: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Des cookies aux sessions● Cookies ≃ variables permettant de contrôler l'exécution

de l'application Web

● Mais … stockage côté client

– Possibilité de modifier les variables

– Possibilité de perturber le programme

– DANGEREUX

➔ Mettre en place un système

– Permettant d'associer des variables à un utilisateur

– Empêchant l'utilisateur de modifier les valeurs

➔ Les variables doivent rester sur le serveur

➔ Sessions

Page 52: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Sessions

● Session :– Période de temps correspondant à navigation

continue d'un utilisateur sur un site

● Gérer les sessions :– Identifier l'instant où un nouvel utilisateur

accède à une des pages du site

– Conserver des informations sur l'utilisateur jusqu'à ce qu'il quitte le site.

Page 53: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Sessions

● PHP (depuis version 4) propose un ensemble de fonctions facilitant gestion des sessions

● Identification de chaque utilisateur

– numéro unique « ID de session » (ou PHPSESSID) attribué à chaque session

– transmis automatiquement d'une page à l'autre

● Soit par cookie● Soit par l'URL (si le poste client n'accepte pas les cookies).

● Création sur le serveur d'une « base de données » de variables de session

– variables automatiquement restituées et sauvegardées d'une page à l'autre

Page 54: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Sessions (API)

● booléen session_start()– Démarre une nouvelle session si elle n'existe pas (pas de

cookie session_id)

– Restaure la session courante si elle existe

– Renvoie true si la session a pu être créée avec succès.

● chaîne session_id()– Retourne l'identifiant courant de session

Page 55: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Sessions (API)

● Manipulation des variables de session– Stockées dans le tableau super global $_SESSION

● Création et utilisation d'une variable de session :

– Utilisation de la variable super globale $_SESSION['var']

– Enregistrer une nouvelle donnée → stocker cette donnée dans $_SESSION avec une clé de votre choix

– Lire ou modifier une donnée de session préalablement enregistrée → accéder à $_SESSION en utilisant la bonne clé.

● Suppression d'une variable de session :

– unset($_SESSION['var']);

Page 56: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Sessions (API)

● booléen session_destroy()– Détruit la session

● Détruit toutes les données associées à la session courante

● Un appel ultérieur à session_start() ouvrira une nouvelle session

● Ne détruit pas l'identifiant de session (s'il est propagé par cookie, vous pouvez l'effacer avec setcookie())

– Renvoie true si la session a pu être détruite avec succès.

Page 57: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Sessions exemple : nombre caché

Page 58: Introduction à PHPimss-atenciam/ITW/5-php.pdf · 2020. 2. 10. · Introduction PHP : – Personal Home Page (le premier) – PHP : Hypertext Preprocessor (l'officiel) – People

Sessions exemple : nombre caché

Serveur

Client 1 Client 2cookie : PHPSESSID=2345 cookie : PHPSESSID=7634

PHPSESSID=2345

nombreCache=88nbEssais=7

PHPSESSID=7634

nombreCache=75nbEssais=0