Programmation Internet. Cours 7. kn@lri.fr http://www.lri.fr/~kn

Documents pareils
Stockage du fichier dans une table mysql:

Serveurs de noms Protocoles HTTP et FTP

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

(structure des entêtes)

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

Protection des protocoles

Développement des Systèmes d Information

L3 informatique TP n o 2 : Les applications réseau

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

1. Installation du Module

Hébergement de site web Damien Nouvel

RFC 7230 : Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

Comment développer et intégrer un module à PhpMyLab?

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Protocoles Applicatifs

Programmation Web. Madalina Croitoru IUT Montpellier

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No2 :

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Réseaux. 1 Généralités. E. Jeandel

Retrouver un mot de passe perdu de Windows

Novell. NetWare 6. GUIDE D'ADMINISTRATION DE NETDRIVE

Le protocole HTTP. 10 minutes pour comprendre. HTTP/0.9 - Lacunes et limitations HTTP/1.0 HTTP/1.1

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Développement Web. Les protocoles

Content Switch ou routage de niveau HTTP

INF8007 Langages de script

Dans l'article précédent, vous avez appris

VTX FTP. Transfert de fichiers business par FTP - Manuel de l'utilisateur. Informations complémentaires : info@vtx.

Application Web et J2EE

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

WebSSO, synchronisation et contrôle des accès via LDAP

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Microsoft Hosted Exchange 2010 DOCUMENT D EXPLOITATION

Types MIME (2) Typage des ressources Internet. Les URI. Syntaxe dans les URI. Possibilité de spécifier un paramètre du sous-type

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Transfert de fichiers (ftp) avec dreamweaver cs5 hébergement et nom de domaine. MC Benveniste

inviu routes Installation et création d'un ENAiKOON ID

Guide utilisateur Module Parents

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

Le stockage local de données en HTML5

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

Avec PICASA. Partager ses photos. Avant de commencer. Picasa sur son ordinateur. Premier démarrage

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

Partager mes photos sur internet

LOGICIEL ALARM MONITORING

«Cachez-moi cette page!»

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

Microsoft Windows NT Server

Introduction à HTTP. Chapitre HTTP 0.9

TD séance n 2c Mise à jour des Systèmes

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

RX3041. Guide d'installation rapide

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

Keyyo Guide de mise en service CTI / API / TAPI Keyyo

Unité de stockage NAS

INSTALLATION ET CONFIGURATION D'UN SERVEUR WEB SUR MAC OS X

1 Introduction Propos du document Introduction De HTTP 1.0 à HTTP

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :

Guide d utilisation. Version 1.1

Accès au Serveur de PAIE «SPV» par INTERNET Paramétrage du poste de travail «Windows»

OpenMediaVault installation

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Sage CRM. 7.2 Guide de Portail Client

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Qlik Sense Cloud. Qlik Sense Copyright QlikTech International AB. Tous droits réservés.

LES ACCES ODBC AVEC LE SYSTEME SAS

Internet Explorer. Microsoft. Sommaire :

PORTAIL INTERNET DE LA GESTION PUBLIQUE Guide d'utilisation du Portail Internet de la Gestion Publique

GROUPE CAHORS EXTRANET

Réseaux et protocoles Damien Nouvel

Les ACL Cisco. F. Nolot Master 2 Professionnel STIC-Informatique 1

NAS 109 Utiliser le NAS avec Linux

SYSTÈMES D INFORMATIONS

Serveur de partage de documents. Étude et proposition d'une solution afin de mettre en place un serveur de partage de documents.

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

Présentation du relais HTTP Open Source Vulture. Arnaud Desmons Jérémie Jourdin

Manuel d'installation

SERVEUR HTTP Administration d apache

Gérer ses impressions en ligne

Présentation, mise en place, et administration d'ocs Inventory et de GLPI

SUPPRIMER SES COOKIES

Module http MMS AllMySMS.com Manuel d intégration

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Connexion à SQL server

Plate-forme de tests des fichiers XML virements SEPA et prélèvements SEPA. Guide d'utilisation

21 mars Simulations et Méthodes de Monte Carlo. DADI Charles-Abner. Objectifs et intérêt de ce T.E.R. Générer l'aléatoire.

Le service FTP. M.BOUABID, Page 1 sur 5

La VOIP :Les protocoles H.323 et SIP

Crédit photos : internet. Questions et réponses

Accès à la messagerie électronique HES

Network Camera. Camera. Network. Guide d installation v1.1. Installation Guide v R1.1. Anglais. Français. Espagnol. Allemand R1.

ETI/Domo. Français. ETI-Domo Config FR

Formation > Développement > Internet > Réseaux > Matériel > Maintenance

Chapitre 2 Accès aux partages depuis votre système d'exploitation

GUIDE UTILISATEUR LIBRAIRIE CENTRALISEE ET SERVEUR DE RECEPTION

Transcription:

Programmation Internet Cours 7 kn@lri.fr http://www.lri.fr/~kn

Plan 1 Systèmes d'exploitation (1/2) 2 Systèmes d'exploitation (2/2) 3 Réseaux, TCP/IP 4 Web et HTML 5 CSS 6 PHP : Introduction 7 PHP : expressions régulières, fichiers, sessions 7.1 Manipulation des chaînes et expressions régulières 7.2 Manipulation de fichiers 7.3 En-tête de requêtes HTTP 7.4 Cookies 7.5 Sessions 2/35

Quelques fonctions utilitaires sur les chaînes explode($delim, $entree) : Découpe la chaîne $entre e suivant la sous-chaîne $delim et renvoie les morceaux dans un tableau. implode($delim, $tab) : Réunit les chaînes se trouvant dans le tableau $tab en les séparant par la chaîne $delim. ltrim($entree) : rtrim($entree) : trim($entree) : Retire les caractères blancs en début de chaîne. Retire les caractères blancs en fin de chaîne. Retire les caractères blancs en début et en fin de chaîne. htmlspecialchars($entree) : convertit les caractères &, ", ', < et > en &, ", &apos;, < et >. 3/35

Expressions régulières : syntaxe Les expressions régulières de PHP sont au format PCRE (Perl Common Regular Expressions) '/r/' où r est une expression de la forme: r ::= a (un caractère). (n'importe quel caractère) r 1 r 2 (r 1 ou r 2 ) r? (r répétée au plus 1 fois) r* (r répétée 0 fois ou plus) r+ (r répétée 1 fois ou plus) [c 1 c n ] (un caractère parmis c 1,, c n ) [c 1 -c n ] (un caractère parmis c 1,, c n ) [^c 1 c n ] (un caractère sauf c 1,, c n ) [^c 1 -c n ] (un caractère sauf c 1,, c n ) ^ (début de texte) $ (fin de texte) (r) (r elle même) 4/35

Expressions régulières : recherche preg_match($regexp, $chaine) renvoie 1 si une sous-chaine de $chaine correspond à $regexp, 0 si aucune souschaine ne correspond et FALSE en cas de problème (attention, 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]+/', $chaine); affiche 0 echo preg_match('/[^a-z]*/', $chaine); affiche 1! echo preg_match('/^[^a-z]*$/', $chaine); affiche 0?> 5/35

Expressions régulières : substitution preg_replace($regexp, $motif, $chaine) recherche toutes les sous-chaînes de $chaine reconnues par $regexp et les remplace par $motif. Ce dernier peut contenir $i pour référencer le i ème groupe de parenthèses <?php $chaine = "10-31-1981"; $reg1 = "/([0-9]+)-([0-9]+)-([0-9]+)/"; echo preg_replace($reg1, "$2/$1/$3", $chaine); // affiche 31/10/1981 $chaine = "10-31-1981"; $reg2 = "/1/"; echo preg_replace($reg2, "toto", $chaine); // affiche toto0-3toto-toto98toto $chaine = "10-31-1981"; $reg3 = "/[0-9]([0-9]*)/" echo preg_replace($reg3, "$1", $chaine); // affiche 0-1-981 (* déplie la regexp le plus possible)?> 6/35

Expressions régulières : séparation preg_split($regexp, $chaine) renvoie un tableau des sous-chaine de $chaine séparées par $motif (équivalent à explode pour des $regexp constantes). <?php $chaine = "Une phrase, c'est plusieurs mots."; print_r (preg_split("/[,.']+/", $chaine)); //Affiche: //Array ( [0] => Une [1] => phrase [2] => c [3] => est // [4] => plusieurs [5] => mots [6] => )?> 7/35

Expressions régulières : recherche exhaustive preg_match_all($regexp, $chaine, &$resultat) &$resultat est un tableau passé par référence. Après l'appel, $resultat[0] contient un tableau avec toutes les sous-chaines reconnues et $resultat[i] contient tous les résultats reconnus par le i ème groupe de parenthèses. Renvoie le nombre de chaines trouvées (i.e. la longueur de $resultat[0]). <?php $res = array(); $chaine = "ABC ACD AEF AB DEF"; echo preg_match_all("/a([a-z]*)/", $chaine, $res); //Affiche 4 print_r ($res); /*Affiche Array ( [0] => Array ( [0] => ABC [1] => ACD [2] => AEF [4] => AB) [1] => Array ( [0] => BC [1] => CD [2] => EF [4] => B) ) */?> 8/35

Plan 1 Systèmes d'exploitation (1/2) 2 Systèmes d'exploitation (2/2) 3 Réseaux, TCP/IP 4 Web et HTML 5 CSS 6 PHP : Introduction 7 PHP : expressions régulières, fichiers, sessions 7.1 Manipulation des chaînes et expressions régulières 7.2 Manipulation de fichiers 7.3 En-tête de requêtes HTTP 7.4 Cookies 7.5 Sessions 9/35

Envoi d'un fichier au serveur (1/2) On utilise la méthode post pour les formulaires. Les valeurs sont envoyées dans la requête HTTP (et non pas encodées dans l'url) <form action="cible.php" method="post" enctype="multipart/form-data"> <input type="file" name="fichier" size="20"/> <button type="sumbit">uploader le fichier</button> </form> Apperçu: Choose File No file chosen Uploader le fichier Coté serveur, la variable $_FILES est définie. $_FILES["fichier"] contient un tableau avec des informations sur le fichier envoyé. Les autres champs (par exemple valeur d'un champ texte) sont stockés dans la variable $_POST (au lieu de $_GET). 10/35

Envoi d'un fichier au serveur (2/2) Étant donné un formulaire avec un champ input de type file et de nom "fichier" on a accès aux information suivantes: $_FILES["fichier"]["error"] : Code d'erreur (0 si tout c'est bien passé, > 0 si une erreur s'est produite. Les autres champs ne sont définis que si "error" vaut 0). $_FILES["fichier"]["tmp_name"] : Nom du fichier temporaire sur le serveur où a été sauvegardé le contenu du fichier envoyé $_FILES["fichier"]["name"] : Nom original du fichier $_FILES["fichier"]["size"] : Taille du fichier $_FILES["fichier"]["type"] : Le type MIME du fichier 11/35

. Ouverture d'un fichier fopen($nomfichier, $mode) Ouvre un fichier dont on donne le nom avec un mode particulier. Les modes sont: "r" (lecture), "r+" (lecture/écriture), "w" (écriture), "w+" (lecture/écriture, création si non-existant), "a" (écriture, ajout à la fin si existant), "a+" (lecture/ écriture, création si non-existant, ajout à la fin si existant). fopen renvoie un descripteur de fichier que l'on peut utiliser pour manipuler le fichier. 12/35

Lecture/écriture/fermeture d'un fichier fread($desc, $taille) Lit au maximum $taille caractères dans un fichier dont le descripteur (renvoyé par fopen) est $desc. La fonction renvoie un chaine d'au plus $taille caractères ou FALSE en cas d'erreur. fwrite($desc, $chaine) Écrit la chaine de caractères à la position courante dans le fichier dont le descripteur est $desc. Renvoi le nombre d'octets écrits ou FALSE en cas d'erreur. fclose($desc) Ferme le fichier dont le descripteur est $desc 13/35

Déplacement dans un fichier fseek($desc, $offset, $orig) Déplace le pointeur interne de position du fichier dont le descripteur est $desc de $offset octets. Le paramètre $orig donne l'origine: SEEK_CUR (décalage à partir de la position courante), SEEK_SET (position absolue dans le fichier), SEEK_END (décalage à partir de la fin de fichier). 14/35

Interface simplifiée file_get_contents($nomfichier) Ouvre un fichier dont on donne le nom et renvoie son contenu sous forme d'une chaine de caractères file($nomfichier) Renvoie un tableau avec une case par ligne dans le fichier. Chaque entrée contient le "\n" terminal. 15/35

Plan 1 Systèmes d'exploitation (1/2) 2 Systèmes d'exploitation (2/2) 3 Réseaux, TCP/IP 4 Web et HTML 5 CSS 6 PHP : Introduction 7 PHP : expressions régulières, fichiers, sessions 7.1 Manipulation des chaînes et expressions régulières 7.2 Manipulation de fichiers 7.3 En-tête de requêtes HTTP 7.4 Cookies 7.5 Sessions 16/35

Retour sur le protocole HTTP Client : GET /~kn/index.html Host: www.lri.fr Serveur : HTTP/1.1 200 OK HTTP/1.1 } code de retour Server: nginx/1.4.1 (Ubuntu) Date: Sun, 17 Nov 2013 16:44:48 GMT Content-Type: text/html Content-Length: 2038 } type de contenu } longueur du contenu <html> <head><title>homepage</title> <body> </head> } contenu (2038 octets) 17/35

Retour sur le protocole HTTP (2) Client : GET /~kn/fichier.pdf HTTP/1.1 Host: www.lri.fr Serveur : HTTP/1.1 200 OK Server: nginx/1.4.1 (Ubuntu) Date: Sun, 17 Nov 2013 16:44:48 GMT Content-Type: application/pdf Content-Length: 103449 %PDF-1.2 % 8 0 obj <</Length 9 0 R/Filter /FlateDecode>> stream 18/35

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! Les appels à la fonction header() doivent se trouver avant le premier echo() du code PHP Le code PHP doit générer (avec echo()) du contenu compatible avec le type annoncé (et pas du HTML) 19/35

Quelques en-tête utiles En tête utilisés par le serveur dans ses réponses Content-type : Content-Disposition : filname="foobar.baz" Cache-Control : must-revalidate Last-Modified : type MIME du contenu envoyé par le serveur permet de mentionner un nom de fichier : attachment; permet de forcer le client à retélécharger la page: no-cache, 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 20/35

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-til? Pas de partage d'information entre plusieur pages Pas de mécanisme de reprise sur panne Pas de persistance de l'information Pas d'authentification (impossible de savoir que deux connexions successives ont été faites par le même client) difficle de réaliser une «application» moderne répartie sur plusieurs pages 21/35

Plan 1 Systèmes d'exploitation (1/2) 2 Systèmes d'exploitation (2/2) 3 Réseaux, TCP/IP 4 Web et HTML 5 CSS 6 PHP : Introduction 7 PHP : expressions régulières, fichiers, sessions 7.1 Manipulation des chaînes et expressions régulières 7.2 Manipulation de fichiers 7.3 En-tête de requêtes HTTP 7.4 Cookies 7.5 Sessions 22/35

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 caractères 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 23/35

Cookies en PHP Créer ou mettre à jour un cookie sur le client: setcookie($nom, $val, $date); $nom : $val : $date : nom du cookie valeur du cookie date d'expiration en secondes depuis epoch (1 er 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); 24/35

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? Fuseaux horaires Conversion de temps (de fuseau) Taille des entiers (Bug de l'an 2000, de l'an 2038, de l'an 292 277 026 596) Secondes intercalaires («leap second») Ce n'est pas encore quelque chose de bien maîtrisé! 25/35

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! On ne peut pas écrire dans $_COOKIE (par exemple $_COOKIE["foo"] = 42), il faut utiliser setcookie(). setcookie() utilise header() et doit donc être appelé avant le premier echo() du fichier. Pour effacer un cookie, on peut lui donner une date d'expiration antérieure à l'instant présent (0 par exemple) 26/35

Avantages et inconvénients des cookies + stockage persistant + interface simple d'utilisation (une variable pour la lecture et setcookie pour l'écriture) - limité en taille - limité en nombre par domaine - type de donnée limité à des chaînes (on ne peut pas stocker un tableau PHP par exemple) +/- stocké sur le client 27/35

Plan 1 Systèmes d'exploitation (1/2) 2 Systèmes d'exploitation (2/2) 3 Réseaux, TCP/IP 4 Web et HTML 5 CSS 6 PHP : Introduction 7 PHP : expressions régulières, fichiers, sessions 7.1 Manipulation des chaînes et expressions régulières 7.2 Manipulation de fichiers 7.3 En-tête de requêtes HTTP 7.4 Cookies 7.5 Sessions 28/35

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. Sur q1.php, l'utilisateur coche des choix dans un formulaire et appuie sur un boutton de soumission qui l'envoie sur q2.php 3. 4. Sur q10.php, l'utilisateur coche des choix dans un formulaire et appuie sur un bouton de soumission qui l'envoie sur resultat.php 5. Sur resultat.php, le résultat global du sondage (% par question, nombre de participants jusqu'à présent etc...) est affiché (Fin de session) 29/35

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: Globale au serveur, et accessibles depuis plusieurs pages PHP différentes Spécifiques à un «utilisateur» (c'est à dire à une session particulière) 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) 30/35

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: Quand le client se déconnecte Après un certain temps («votre session a expiré, veuillez vous reconnecter») Quand le code PHP appelle session_end(); Attention! session_start() doit être appelé avant le premier echo du fichier. 31/35

Variables de session en PHP (2) <?php /* Fichier page1.php */ session_start(); $_SESSION["Valeur"] = 42;?> <html> <body> Veuillez cliquer sur le <a href="page2.php">lien</a> </body> </html> <html> <body> La valeur est <?php echo $_SESSION["Valeur"];?> <!-- affiche 42 --> </body> </html> 32/35

Avantages et inconvénients des session + Informations stockées sur le serveur + Pas de limite de taille + Pas limité à des chaînes de caractères - Valeurs perdues en fin de session - Nécessite des cookies 33/35

Sessions PHP: détails d'implantation Coté client 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: Connexion à une page PHP (envoie du cookie ("php_ssid", "12345")) $_GLOBAL["12345"] = Array(); $_SESSION = $_GLOBAL[$_COOKIE["php_ssid"] 34/35

Dans la vraie Vie TM Mélange de variables de sessions, cookies et bases de données. Scénario réaliste: site de commerce en ligne Login/mot de passe stocké dans une BD Panier courant stocké dans une variable de session Login, date de dernière visite, dernière page visitée stockés dans un en cookie 35/35