Upload
others
View
11
Download
0
Embed Size (px)
Citation preview
Introduction à PHP
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...
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
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)
Principe
● Page générée dynamiquement côté serveur
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
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
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é)
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
Informations sur la configuration
● Fonctions phpinfo et phpversion
Commentaires
● // ou # : commentaire sur une ligne ou à la suite de l'instruction
● /* … */ : commentaire sur plusieurs lignes
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>
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
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é)
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
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
Exemples de scalaires
Variablenon définie
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
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.
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)
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
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()
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;?>
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)
Tableaux
Tableau numérique(indices ordonnés consécutifs)
Tableau mixte Tableau multidimensionnel
Tableau numérique(indices non ordonnés non consécutifs)
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);
Tableaux numériques
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
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 ?
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
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
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
Parcours d'un tableau
● foreach : deux syntaxesforeach (tableau as variable_valeur) { instructions}foreach (tableau as variable-clé => variable_valeur) { instructions}
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
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}
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);
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
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
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);
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 ?
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";
?>
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";
?>
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();
?>
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,...
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'] ?>
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'
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).
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...).
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
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
...
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
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.
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
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
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']);
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.
Sessions exemple : nombre caché
Sessions exemple : nombre caché
Serveur
Client 1 Client 2cookie : PHPSESSID=2345 cookie : PHPSESSID=7634
PHPSESSID=2345
nombreCache=88nbEssais=7
PHPSESSID=7634
nombreCache=75nbEssais=0