From: Kim Nguyễn Date: Wed, 5 Nov 2014 09:45:42 +0000 (+0100) Subject: . X-Git-Url: http://git.nguyen.vg/gitweb/?p=hacks%2FsimpleWebSlides.git;a=commitdiff_plain;h=9482b8b27b70c6f885abbf98d69b5256ce8a2ea2 . --- diff --git a/unix_prog_web/unix_prog_web_07.xhtml b/unix_prog_web/unix_prog_web_07.xhtml index 73d92d1..c0762b9 100644 --- a/unix_prog_web/unix_prog_web_07.xhtml +++ b/unix_prog_web/unix_prog_web_07.xhtml @@ -4,12 +4,12 @@ > - PHP : Fonctions + PHP : expressions régulières, fichiers, sessions + content="Copyright © 2014 Kim Nguyễn" /> @@ -36,7 +36,7 @@ - +

Programmation Internet

Cours 7

@@ -44,179 +44,6 @@
http://www.lri.fr/~kn
-

Définitions de fonctions

- -
-

Fonctions

-

Les fonctions sont déclarées à l'aide du - mot-clé function. On renvoie des résultats à - l'aide du mot-clé return.

- function double ($x) - { - return $x + $x; - } - - echo double(10); - ]]> - -
- - -
-

Portée des variables locales et globales - -

-
-
- <?php - $a = 42; - function add_a($x) - { - - return $x + $a; - } - echo add_a(10); - ?> - -
-
- <?php - $a = 42; - function add_a($x) - { - global $a; - return $x + $a; - } - echo add_a(10); - ?> - -
-
- - -

Le code de gauche affiche 10 ! - Les variables ont une portée locale - par défaut. Si $a n'est pas définie dans le corps de la - fonction, sa valeur est NULL - (variable non définie). Pour référencer - des variables globales, on utilise le mot clé global. -

-
-
-

Fonction : définition

-

On peut utiliser une fonction « avant » de la définir :

- <?php - echo next(10); - echo <br/>; - - function next($x) - { - return $x + 1; - } - ?> -

On définira toujours des fonctions avant de - les utiliser. On ne peut pas définir deux fonctions avec le même - nom. -

-
-
-

Fonctions : passage par référence

-

On utiliser le modificateur & devant - un paramètre de fonction pour indiquer que ce dernier est passé - par référence.

-
-
- <?php - function add_a($tab) - { - $tab["a"] = 42; - } - - $mytab = array(); - add_a($mytab); - echo $mytab["a"]; - //n'affiche rien (car NULL ⇝ "") -?> -
-
- <?php - function add_a(&$tab) - { - $tab["a"] = 42; - } - - $mytab = array(); - add_a($mytab); - echo $mytab["a"]; - //affiche 42 -?> -
- -
-

Lorsque l'on veut modifier un argument de la - fonction (plutot que de renvoyer une version modifiée, par - ex. mise à jour d'un tableau, d'une chaîne, …), on doit le - passer par référence. -

-

Manipulation des chaînes et expressions régulières

Quelques fonctions utilitaires sur les chaînes

@@ -239,7 +66,7 @@ e suivant la
Retire les caractères blancs en début et en fin de chaîne.
htmlspecialchars($entree)
-
converti les caractères &, ", +
convertit les caractères &, ", ', < et > en &amp;, &quot;, &apos;, &lt; et &gt;. @@ -282,17 +109,17 @@ e suivant la utiliser === pour tester le résultat).

<?php - $chaine = "ABCDEFABCDEF"; - echo preg_match('/ABC/', $chaine); // affiche 1 - echo preg_match('/DEF/', $chaine); // affiche 1 - echo preg_match('/^ABC/', $chaine); // affiche 1 - echo preg_match('/^DEF/', $chaine); // affiche 0 - echo preg_match('/ABC$/', $chaine); // affiche 0 - echo preg_match('/DEF$/', $chaine); // affiche 1 - echo preg_match('/(ABC...)+/', $chaine); // affiche 1 - echo preg_match('/[^A-Z]+/'); // affiche 0 - echo preg_match('/[^A-Z]*/'); // affiche 1 ! - echo preg_match('/^[^A-Z]*$/'); // affiche 0 + $chaine = "ABCDEFABCDEF"; + echo preg_match('/ABC/', $chaine); // affiche 1 + echo preg_match('/DEF/', $chaine); // affiche 1 + echo preg_match('/^ABC/', $chaine); // affiche 1 + echo preg_match('/^DEF/', $chaine); // affiche 0 + echo preg_match('/ABC$/', $chaine); // affiche 0 + echo preg_match('/DEF$/', $chaine); // affiche 1 + echo preg_match('/(ABC...)+/', $chaine); // affiche 1 + echo preg_match('/[^A-Z]+/', $chaine); // affiche 0 + echo preg_match('/[^A-Z]*/', $chaine); // affiche 1 ! + echo preg_match('/^[^A-Z]*$/', $chaine); // affiche 0 ?>
@@ -452,6 +279,367 @@ e suivant la

Renvoie un tableau avec une case par ligne dans le fichier. Chaque entrée contient le "\n" terminal.

+

En-tête de requêtes HTTP

+ +
+

Retour sur le protocole HTTP

+ +
+ +
+

Retour sur le protocole HTTP (2)

+ +
+
+

Modifier le content-type en PHP

+

Fichier notes_csv.php:

+ <?php + header('Content-type: application/csv'); + header('Content-Disposition: attachement; filename="notes.csv"'); + echo "Nom, Note\n"; + foreach ($NOTES as $nom => $note) + echo $nom . ", " . $note . "\n"; + + ?> +

⚠ Attention!

+ +
+ +
+

Quelques en-tête utiles

+

En tête utilisés par le serveur dans ses réponses

+
+
Content-type
type MIME du contenu envoyé par le + serveur
+
Content-Disposition
permet de mentionner un nom de + fichier : attachment; filname="foobar.baz"
+
Cache-Control
permet de forcer le client à + retélécharger la page: no-cache, must-revalidate +
+
Last-Modified
date de dernière modification du + contenu demandé
+
+

En tête utilisés par le client dans ses requêtes

+
+
Range
permet de ne récupérer qu'un intervale + d'octets donné dans un fichier: bytes=500-999 +
+ … +
+ +
+
+

Retour sur le protocole HTTP (3)

+

On rappelle que HTTP est un protocole stateless + (sans état, i.e. le serveur Web ne conserve pas d'information + entre les connexions). Quel problème cela pose-t-il ?

+ +

⇒ difficle de réaliser une « application » + moderne répartie sur plusieurs pages

+
+ +

Cookies

+
+

Cookies

+

Un cookie est un paquet de données envoyé par le + serveur, stocké par le client (navigateur Web) et renvoyé au serveur + lors d'une nouvelle connexion. Les propriétés d'un cookie sont: +

+
+
Son nom
une chaîne de caractères
+
Sa valeur
une chaîne de caraceres
+
Sa durée de vie
jusqu'à la fin de la « session » ou pour + une période donnée
+
Son domaine
Le nom du site web émetteur du cookie
+
Son chemin
Le sous-répertoire (par rapport à la racine + du site) pour lequel le cookie est valide
+
+

⚠ Attention! seul le domaine qui a + déposé le cookie est capable de le relire

+
+
+

Cookies en PHP

+

Créer ou mettre à jour un cookie sur le client:

+ + setcookie($nom, $val, $date); + +
+
$nom
nom du cookie
+
$val
valeur du cookie
+
$date
date d'expiration en secondes + depuis epoch (1er janvier 1970 00:00:00) + ou NULL pour une expiration automatique.
+
+

(on peut récupérer le nombre de secondes depuis epoch avec + la fonction time()).
+ Exemple: +

+ setcookie("mon_cookie", "42", time() + 3600 * 24 * 30); +
+
+

Petite digression sur «epoch»

+

Représenter le temps (une date) dans un programme informatique est + quelque chose de compliqué. Quels problèmes cela pose-t-il ? +

+ +

Ce n'est pas encore quelque chose de bien maîtrisé !

+
+
+

Cookies en PHP

+

On peut récupérer la valeur d'un cookie depuis PHP: +

+ $_COOKIE["mon_cookie"] +

Un cookie "foo" existe (i.e. a été défini + auparavant) si une entrée correspondante existe dans le tableau + global $_COOKIE. On peut tester qu'une entrée + existe dans un tableau avec isset(). +

+

⚠ Attention!

+ +
+ +
+

Avantages et inconvénients des cookies

+ +
+

Sessions

+
+

Sessions

+

Une session HTTP est un ensemble de requêtes/réponses HTTP + entre un serveur et un même client.
+ Exemple d'un sondage en ligne: +

+
  1. Le visiteur arrive sur la page q1.php en cliquant sur + le lien « commencer le sondage » (Début de session) +
  2. +
  3. Sur q1.php, l'utilisateur coche des choix dans un formulaire et appuie + sur un boutton de soumission qui l'envoie sur q2.php +
  4. +
  5. …
  6. +
  7. Sur q10.php, l'utilisateur coche des choix dans un + formulaire et appuie sur un bouton de soumission qui l'envoie + sur resultat.php
  8. +
  9. Sur resultat.php, le résultat global du sondage (% + par question, nombre de participants jusqu'à présent etc...) est + affiché (Fin de session) +
  10. +
+ +
+
+

Variables de session

+

Pour programmer une application Web, on souhaîte avoir accès à + des variables de session c'est à dire des variables qui + sont: +

+ +

Les variables de sessions sont donc propres à chaque client et + persistent le temp de la session (le temps de session est décidé par + le serveur)

+
+
+

Variables de session en PHP

+

On initie une session avec la fonction:

+ session_start(); +

Une fois appelée, la variable $_SESSION + contient un tableau que l'on peut utiliser entre plusieurs + pages. Les valeurs contenues dans le tableau persistent jusqu'à la + fin de la session. Une session se termine: +

+ +

⚠ + Attention! session_start() doit être appelé + avant le premier echo du fichier.

+
+
+

Variables de session en PHP (2)

+ + <?php /* Fichier page1.php */ + session_start(); + $_SESSION["Valeur"] = 42; + ?> + + + Veuillez cliquer sur le "page2.php"lien + + +]]> + + + La valeur est echo $_SESSION["Valeur"]; + + + +]]> +
+
+

Avantages et inconvénients des session

+ +
+
+

Sessions PHP: détails d'implantation

+
+
Coté client
+
+
+
+
+
+
+
+
+
+Connexion à une page PHP (envoie du cookie ("php_ssid", "12345")) + + +
+
Coté serveur (PHP)
+ session_start();
+ - génération d'un ID unique "12345"
+ - dépot d'un cookie "php_ssid", valeur "12345", durée 10 minutes + - création dans un tableau global d'une entrée:
+ $_GLOBAL["12345"] = Array();
+
+ $_SESSION = $_GLOBAL[$_COOKIE["php_ssid"]] +
+
+
+ +
+

Dans la vraie VieTM

+

Mélange de variables de sessions, cookies et bases de données.
+ Scénario réaliste: site de commerce en ligne +

+ +

Pourquoi ?

+ + +