Gestion et suivi d informations Info 43 - Programmation WEB et Bases de Données Luiz Angelo Steffenel Université de Reims Champagne-Ardenne luiz-angelo.steffenel@univ-reims.fr http://cosy.univ-reims.fr/~lsteffenel Luiz Angelo Steffenel Gestion et suivi d informations 1/ 50
Plan 1 2 Cookies en PHP 3 Fonctions associées au session Luiz Angelo Steffenel Gestion et suivi d informations 2/ 50
en PHP manipulation de fichiers et répertoires pas d opérations sur les contenus Gestion du contenu des fichiers lecture / écriture des contenus de fichier Problèmes de droits d accès Luiz Angelo Steffenel Gestion et suivi d informations 3/ 50
Plan 1 2 Cookies en PHP 3 Fonctions associées au session Luiz Angelo Steffenel Gestion et suivi d informations 4/ 50
Manipulation du système Opérations opération sur les répertoires opérations sur les fichiers opérations standard de gestion de système de fichier cp, mv rm touch... Luiz Angelo Steffenel Gestion et suivi d informations 5/ 50
Quelques opérations sur les répertoires Création b o o l mkdir ( s t r i n g pathname [, i n t mode [, b o o l r e c u r s i v e [, r e s o u r c e c o n t e x t ] ] ] ) Suppression b o o l rmdir ( s t r i n g dirname [, r e s o u r c e c o n t e x t ] ) Renommage b o o l rename ( s t r i n g oldname, s t r i n g newname [, r e s o u r c e c o n t e x t ] ) Luiz Angelo Steffenel Gestion et suivi d informations 6/ 50
Parcours des répertoires Opérations ouverture du répertoire r e s o u r c e opendir ( s t r i n g path [, r e s o u r c e c o n t e x t ] ) lecture des différentes entrées s t r i n g r e a d d i r ( r e s o u r c e d i r _ h a n d l e ) retour au début du répertoire v o i d r e w i n d d i r ( r e s o u r c e d i r _ h a n d l e ) fermeture du répertoire v o i d c l o s e d i r ( r e s o u r c e d i r _ h a n d l e ) Luiz Angelo Steffenel Gestion et suivi d informations 7/ 50
Affichage des fichiers du répertoire courant <?php $ d i r = ". " ; i f ( $dh = opendir ( $ d i r ) ) { w h i l e ( ( $ f i l e = r e a d d i r ( $dh ) )!== f a l s e ) { echo "<p> f i c h i e r : $ f i l e </p>" ; } c l o s e d i r ( $dh ) ; }?> Luiz Angelo Steffenel Gestion et suivi d informations 8/ 50
Quelques opérations sur les fichiers Copie b o o l copy ( s t r i n g source, s t r i n g d e s t ) Renommage b o o l rename ( s t r i n g oldname, s t r i n g newname [, r e s o u r c e c o n t e x t ] ) Destruction b o o l u n l i n k ( s t r i n g f i l e n a m e [, r e s o u r c e c o n t e x t ] ) Luiz Angelo Steffenel Gestion et suivi d informations 9/ 50
Test sur les fichiers / répertoires Eléments de test droits des fichiers b o o l is_executable ( s t r i n g f i l e n a m e ) b o o l i s _ r e a d a b l e ( s t r i n g f i l e n a m e ) b o o l is_writable ( s t r i n g f i l e n a m e ) type b o o l is_dir ( s t r i n g f i l e n a m e ) b o o l i s _ f i l e ( s t r i n g f i l e n a m e ) existence b o o l f i l e _ e x i s t s ( s t r i n g f i l e n a m e ) Luiz Angelo Steffenel Gestion et suivi d informations 10/ 50
Plan 1 2 Cookies en PHP 3 Fonctions associées au session Luiz Angelo Steffenel Gestion et suivi d informations 11/ 50
Accès au contenu Lecture lecture avec ouverture et fermeture lecture directe Ecriture écriture avec ouverture et fermeture Modification lecture et écriture Luiz Angelo Steffenel Gestion et suivi d informations 12/ 50
Ouverture Ouverture de fichier ouverture de fichier en fonction de son utilisation r e s o u r c e fopen ( s t r i n g f i l e n a m e, s t r i n g mode [, b o o l use_include_path [, r e s o u r c e z c o n t e x t ] ] ) modes d ouverture r lecture seule, positionnement au début r+ lecture/écriture, positionnement au début w écriture seule, positionnement au début, destruction du fichier r+ lecture/écriture, positionnement au début, destruction du fichier a écriture seule, positionnement à la fin a+ lecture/écriture, positionnement à la fin fermeture b o o l f c l o s e ( r e s o u r c e h a n d l e ) Luiz Angelo Steffenel Gestion et suivi d informations 13/ 50
Lecture dans un fichier Méthodes de lecture lecture d un caractère s t r i n g f g e t c ( r e s o u r c e h a n d l e ) lecture d une chaîne de caractères s t r i n g f g e t s ( r e s o u r c e h a n d l e [, i n t l e n g t h ] ) Test test de fin de fichier b o o l f e o f ( r e s o u r c e h a n d l e ) Luiz Angelo Steffenel Gestion et suivi d informations 14/ 50
Exemple de lecture dans un fichier <html> <head></head> <body> <? $ f i c = f o p e n (" t o t o. t x t "," r " ) ; do{ $ l e c t=f g e t c ( $ f i c ) ; echo " $ l e c t " ; } w h i l e (! f e o f ( $ f i c ) ) ; f c l o s e ( $ f i c ) ; $ f i c = f o p e n (" t o t o. t x t "," r " ) ; do{ $ l e c t=f g e t s ( $ f i c ) ; echo " $ l e c t " ; } w h i l e (! f e o f ( $ f i c ) ) ; f c l o s e ( $ f i c ) ;?> </body> </html> Luiz Angelo Steffenel Gestion et suivi d informations 15/ 50
Ecriture dans un fichier Méthodes d écriture écriture d une chaîne i n t f w r i t e ( r e s o u r c e handle, s t r i n g s t r i n g [, i n t l e n g t h ] ) é c r i t u r e en mode b i n a i r e i n t f p u t s ( r e s o u r c e handle, s t r i n g s t r i n g [, i n t l e n g t h ] ) gestion du buffer b o o l f f l u s h ( r e s o u r c e h a n d l e ) Luiz Angelo Steffenel Gestion et suivi d informations 16/ 50
Exemple d écriture dans un fichier <html> <head> < t i t l e > E c r i t u r e dans un f i c h i e r </ t i t l e > </head> <body> <? $ f i c=f o p e n (" monfic. t x t ","w" ) ; f p u t s ( $ f i c, " j e f a i s un e s s a i \n " ) ; f c l o s e ( $ f i c ) ;?> </body> </html> Luiz Angelo Steffenel Gestion et suivi d informations 17/ 50
Méthodes alternatives de lecture Lecture complète d un fichier vers un tableau a r r a y f i l e ( s t r i n g f i l e n a m e [, i n t use_include_path [, r e s o u r c e c o n t e x t ] ] ) Présence des caractères de fin de ligne dans chaque case vers une chaîne s t r i n g f i l e _ g e t _ c o n t e n t s ( s t r i n g f i l e n a m e [, b o o l use_include_path [, r e s o u r c e c o n t e x t [, i n t o f f s e t [, i n t maxlen ] ] ] ] ) Luiz Angelo Steffenel Gestion et suivi d informations 18/ 50
Exemple de lecture alternative <html> <head></head> <body> <? $tab = f i l e (" msg. t x t " ) ; f o r e a c h ( $tab as $ l i g n e ){ echo "<p> $ l i g n e </p >"; }?> <p> </p> <? $ch = f i l e _ g e t _ c o n t e n t s (" msg. t x t " ) ; echo "<p> $ch </p>"; $ch1 = n l 2 b r ( $ch ) ; echo "<p> $ch1 </p>";?> </body> </html> Luiz Angelo Steffenel Gestion et suivi d informations 19/ 50
Ecriture alternative dans un fichier écriture directe d une donnée i n t f i l e _ p u t _ c o n t e n t s ( s t r i n g f i l e n a m e, mixed data [, i n t f l a g s [, r e s o u r c e c o n t e x t ] ] ) exemple <? $ch = " c e c i e s t un e s s a i \n c e c i e s t un e s s a i " ; f i l e _ p u t _ c o n t e n t s (" xxx. t x t ", $ch ) ;?> Luiz Angelo Steffenel Gestion et suivi d informations 20/ 50
Plan 1 2 Cookies en PHP 3 Fonctions associées au session Luiz Angelo Steffenel Gestion et suivi d informations 21/ 50
Upload? Principe émission volontaire d un fichier depuis le client vers le serveur choix du fichier sur le client (formulaire) chemin complet navigation dans le système de fichier émission au serveur sauvegarde dans un fichier temporaire sur le serveur déplacement du fichier dans le répertoire de destination Luiz Angelo Steffenel Gestion et suivi d informations 22/ 50
Configuration du serveur élements dans php.ini ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; R e s o u r c e L i m i t s ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;.... ; Maximum amount o f time each ; s c r i p t may spend p a r s i n g r e q u e s t data max_input_time = 60.... ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; F i l e Uploads ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Whether to a l l o w HTTP f i l e u p l o a d s. f i l e _ u p l o a d s = On ; Temporary d i r e c t o r y f o r HTTP u p l o a d e d ; f i l e s ( w i l l use system d e f a u l t i f not s p e c i f i e d ). ; upload_tmp_dir = ; Maximum a l l o w e d s i z e f o r u p l o a d e d f i l e s. u p l o a d _ m a x _ f i l e s i z e = 2M Luiz Angelo Steffenel Gestion et suivi d informations 23/ 50
Accès aux informations Le tableau $_FILE accès côté serveur aux informations sur le fichier transmis tableau associatif à double entrée éléments accessibles $_FILES[ userfile ][ name ] nom du fichier sur le client $_FILES[ userfile ][ type ] type MIME du fichier (non vérifié!) $_FILES[ userfile ][ size ] taille en octets $_FILES[ userfile ][ tmp_name ] nom temporaire sur le serveur $_FILES[ userfile ][ error ] code d erreur Luiz Angelo Steffenel Gestion et suivi d informations 24/ 50
Fonctions associées Sécurité!! déplacement d un fichier téléchargé b o o l move_uploaded_file ( s t r i n g f i l e n a m e, s t r i n g d e s t i n a t i o n ) test de téléchargement pas la méthode POST b o o l i s _ u p l o a d e d _ f i l e ( s t r i n g f i l e n a m e ) Luiz Angelo Steffenel Gestion et suivi d informations 25/ 50
Erreurs et codes d erreurs Codes d erreurs 0 - UPLOAD_ERR_OK aucune erreur 1 - UPLOAD_ERR_INI_SIZE taille supérieure à celle précisée dans le fichier php.ini 2 - UPLOAD_ERR_FORM_SIZE taille supérieure à MAX_FILE_SIZE précisée dans le formulaire html 3 - UPLOAD_ERR_PARTIAL fichier partiellement téléchargé 4 - UPLOAD_ERR_NO_FILE aucun fichier téléchargé 6 - UPLOAD_ERR_NO_TMP_DIR dossier temporaire manquant 7 - UPLOAD_ERR_CANT_WRITE échec d écriture sur le disque Luiz Angelo Steffenel Gestion et suivi d informations 26/ 50
Formulaire côté client <form e n c t y p e=" m u l t i p a r t / form data " a c t i o n ="up. php" method="p o s t"> <i n p u t t y p e="h i d d e n " name="max_file_size" v a l u e ="300000" /> Envoyez ce f i c h i e r : <i n p u t name=" u s e r f i l e " t y p e=" f i l e " /> <i n p u t t y p e="submit " v a l u e="envoyer l e f i c h i e r " /> </form> Luiz Angelo Steffenel Gestion et suivi d informations 27/ 50
Script côté serveur $ u p l o a d f i l e = basename ( $_FILES [ u s e r f i l e ] [ name ] ) ; i f ( move_uploaded_file ( $_FILES [ u s e r f i l e ] [ tmp_name ], $ u p l o a d f i l e ) ) { echo " Le f i c h i e r v a l i d e e t mis en p l a c e " ; } e l s e { echo " e r r e u r!!! " ; } Luiz Angelo Steffenel Gestion et suivi d informations 28/ 50
Plan Cookies en PHP 1 2 Cookies en PHP 3 Fonctions associées au session Luiz Angelo Steffenel Gestion et suivi d informations 29/ 50
Cookies Cookies en PHP élément du protocole HTTP mécanisme d enregistrement et de lecture d informations (chaînes de caractères) sur le client limitation de la lecture aux cookies que l on a déposés Luiz Angelo Steffenel Gestion et suivi d informations 30/ 50
Constitution d un cookie Cookies en PHP Cookie name nom du cookie value valeur du cookie expire date d expiration du cookie (temps UNIX) path chemin sur le serveur sur lequel le cookie sera disponible domain domaine où le cookie est disponible secure dépose du cookie lors d une connexion sécurisée (https) Luiz Angelo Steffenel Gestion et suivi d informations 31/ 50
Plan Cookies en PHP 1 2 Cookies en PHP 3 Fonctions associées au session Luiz Angelo Steffenel Gestion et suivi d informations 32/ 50
Variables et fonctions Cookies en PHP Dépôt de cookies dépose avant toute génération de texte b o o l s e t c o o k i e ( s t r i n g name [, s t r i n g v a l u e [, i n t e x p i r e [, s t r i n g path [, s t r i n g domain [, b o o l s e c u r e ] ] ] ] ] ) Accès aux cookies utilisation du tableau $_COOKIE[] Luiz Angelo Steffenel Gestion et suivi d informations 33/ 50
Dépose d un cookie Cookies en PHP <? s e t c o o k i e (" moncookie ", " c e c i e s t ma v a l e u r ", time ( ) + 3 6 0 0 ) ;?> <html> <head></head> <body> <p> c o o k i e mis en p l a c e </p> </body> </html> Luiz Angelo Steffenel Gestion et suivi d informations 34/ 50
Lecture d un cookie Cookies en PHP <? $ v a l c o o k = $_COOKIE [ " moncookie " ] ;?> <html> <head> </head> <body> <p> l a v a l e u r du c o o k i e e s t : <? echo $ v a l c o o k ;?> </p> </body> </html> Luiz Angelo Steffenel Gestion et suivi d informations 35/ 50
Destruction et modification Cookies en PHP Opérations destruction : redépose avec une date de validité antérieure modification : redépose du cookie Luiz Angelo Steffenel Gestion et suivi d informations 36/ 50
Cas des cookies de session Cookies en PHP Cookie de session cookie dont la durée de vie est limité à l exécution du client (navigateur) Opération création : dépose sans date d expiration destruction : automatique lors de la fermeture du client (navigateur) Luiz Angelo Steffenel Gestion et suivi d informations 37/ 50
Plan Fonctions associées au session 1 2 Cookies en PHP 3 Fonctions associées au session Luiz Angelo Steffenel Gestion et suivi d informations 38/ 50
Session? Fonctions associées au session Principe moyen de transmettre des informations tout au long de la navigation association d un identificateur unique SID à chaque client association sur le serveur : SID zone de données nécessité de passer l identificateur de session SID de page en page Luiz Angelo Steffenel Gestion et suivi d informations 39/ 50
Configuration Fonctions associées au session ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Module S e t t i n g s ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;... [ S e s s i o n ]... ; Whether to use c o o k i e s. s e s s i o n. u s e _ c o o k i e s = 1 ; This o p t i o n e n a b l e s a d m i n i s t r a t o r s to make t h e i r u s e r s ; i n v u l n e r a b l e to a t t a c k s which i n v o l v e p a s s i n g s e s s i o n i d s ; i n URLs ; d e f a u l t s to 0. s e s s i o n. use_only_cookies = 1 ; Name o f t h e s e s s i o n ( used as c o o k i e name ). s e s s i o n. name = PHPSESSID... ; Document e x p i r e s a f t e r n m i n u t e s. s e s s i o n. c a c h e _ e x p i r e = 180... Luiz Angelo Steffenel Gestion et suivi d informations 40/ 50
Transmission de l identificateur Fonctions associées au session Par des cookies dépôt sur le client d un cookie dont la valeur est l identificateur de session suivi de la session par récupération du cookie Par l URL création d une URL portant le numéro de session necéssité de mettre en place le SID pour chaque changement de page : lien formulaire Luiz Angelo Steffenel Gestion et suivi d informations 41/ 50
Plan Fonctions associées au session 1 2 Cookies en PHP 3 Fonctions associées au session Luiz Angelo Steffenel Gestion et suivi d informations 42/ 50
Création, suivi, destruction Fonctions associées au session Création / suivi création et suivi utilisent la fonction : b o o l s e s s i o n _ s t a r t ( v o i d ) doit être utilisé avant toute génération de texte / html Destruction destruction de la session b o o l s e s s i o n _ d e s t r o y ( v o i d ) ne détruit pas le cookie associé, s il existe Luiz Angelo Steffenel Gestion et suivi d informations 43/ 50
Fonctions associées au session Enregistrement de données dans la session Implicite utilisation du tableau $_SESSION $ v a l = 1 5 7 ; $_SESSION [ " v a l " ] = $ v a l ; $_SESSION [ " v a l 1 " ] = " t o t o " ; Explicite utilisation de b o o l s e s s i o n _ r e g i s t e r ( mixed name [, mixed... ] ) exemple $ v a r = " une c h a i n e " ; s e s s i o n _ r e g i s t e r (" v a r " ) ; Luiz Angelo Steffenel Gestion et suivi d informations 44/ 50
Accès aux données enregistrées Fonctions associées au session Implicite utilisation du tableau $_SESSION echo $_SESSION [ " v a l " ] ; $_SESSION [ " v a l " ] = 7 8 9 5 ; Luiz Angelo Steffenel Gestion et suivi d informations 45/ 50
Passage de l identificateur de session Fonctions associées au session Cas des liens utilisation de <?SID?> dans l adresse (href) <a h r e f ="t o t o. php<?sid?>"> mon l i e n </a> Cas des formulaires utilisation de <?SID?> action dans l adresse associée au champ <form name=" f " method="post" a c t i o n =" t r a i t. php<?sid?>">... </form> Luiz Angelo Steffenel Gestion et suivi d informations 46/ 50
Exemple Fonctions associées au session Formulaire login / pass <html> <head> </ head> <body> <form method="post" a c t i o n=" l o g. php"> <i n p u t type=" t e x t " name=" l o g i n "> <i n p u t type=" password " name=" password "> <i n p u t type=" submit " v a l u e="go"> </ form> </ body> </ html> Luiz Angelo Steffenel Gestion et suivi d informations 47/ 50
Exemple Fonctions associées au session Test d accès <? $ l o g i n = $_POST[ " l o g i n " ] ; $ p a s s = $_POST[ " password " ] ; $ f i c = f i l e ( ". / f i c h l o g. t x t " ) ; $ t r o u v e = 0 ; f o r ( $ i =0; $i <count ( $ f i c ) && $ t r o u v e == 0 ; $ i ++){ $ e n t r e e = e x p l o d e ( " ; ", $ f i c [ $ i ] ) ; i f ( strcmp ( $ e n t r e e [ 0 ], $ l o g i n ) == 0 && strcmp ( r t r i m ( $ e n t r e e [ 1 ] ), $ p a s s ) == 0){ $ t r o u v e = 1 ; } } i f ( $ t r o u v e == 0){ echo "<html> <body> <h1> E r r e u r </h1> </body> </html >"; e x i t ; } s e s s i o n _ s t a r t ( ) ; $_SESSION [ " l o g i n " ] = $ l o g i n ;?> Luiz Angelo Steffenel Gestion et suivi d informations 48/ 50
Fonctions associées au session <html> <head> < t i t l e > l o g. php </ t i t l e > </head> <body> <a h r e f =" s u i t e. php<?sid?>"> a l l e r v e r s l a s u i t e </a> </body> </html> Luiz Angelo Steffenel Gestion et suivi d informations 49/ 50
Exemple Fonctions associées au session Test d accès <? s e s s i o n _ s t a r t ( ) ; i f (! i s s e t ( $_SESSION [ " l o g i n " ] ) { echo "<html> <body> <h1> E r r e u r </h1> </body> </html >"; e x i t ; }?> <html> <head> < t i t l e > l o g. php </ t i t l e > </head> <body> <p> Bonjour </a> </body> </html> Luiz Angelo Steffenel Gestion et suivi d informations 50/ 50