PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1
D ÉFINITION DE FONCTIONS FRÉQUEMMENT UTILISÉES Certaines fonctions sont utilisées dans plusieurs scripts PHP Comment faire pour ne pas les définir dans chacune des pages ? Utilisation de : include() include("fichier") ; require() require("fichier") ; include_once() include_once("fichier") ; require_once() require_once("fichier") ; Permet d inclure le contenu de fichier dans le script courant 2 PWB L3 Miage
INCLUDE ET REQUIRE 03:32:44 3 Programmation Web Fichier mafonction.php <? function mafonction($arg) { if (isset($arg)) if (isset($arg)) { echo ("Vrai") ; echo ("Vrai") ; } else else { echo ("Faux") ; echo ("Faux") ; }}?> Fichier utilisation1.php … require("mafonction.php") mafonction(true) ; … Fichier utilisation2.php … include("mafonction.php") … $var=false ; mafonction($var) ; … Fichier utilisation3.php … require("mafonction.php") …
D ÉFINITION DE CONSTANTES <?php define("ma_constante", "Bonjour à tous") ; echo ma_constante ; ?> 4 PWB L3 Miage Définition d'une constante Utilisation de la constante nomnom valeurvaleur
G ESTION DES ERREURS Dans certains cas, il nest ni possible ni utile de poursuivre lexécution du code PHP (variables non définies, valeurs erronées, échec de connexion, …) Arrêt brutal de lexécution du code: die(message) exit(message) Envoie message au navigateur et termine lexécution du script courant 03:32:44 5 PWB L3 Miage
03:32:44 6 PWB L3 Miage Gestion des erreurs – (Mauvais) Exemple <?php $html = <<<HTML die-exit die-exit HTML; if (!isset($val)) { die($html."problème val") ; die($html."problème val") ; /* Au delà de ce point, /* Au delà de ce point, fin du script */ fin du script */} $html.= <<<HTML Choix: $val die- exit die- exit problème val PHPHTML Navigateur HTML non valide …
G ESTION DE L ' AFFICHAGE DES ERREURS int error_reporting ( [int level] ) 03:32:44 7 PWB L3 Miage php.iniphp.iniConstanteE_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_ALL E_STRICT Ancien niveau d'erreur Sur un serveur en production, toute erreur affichée donne des indices sur les scripts et rend le site vulnérable display_errors boolean boolean display_errors boolean boolean Débogage
OPÉRATEUR DE CONTRÔLE D'ERREUR $v = file("dummy.txt") or die("Problème de lecture") ; 03:32:44 8 PWB L3 Miage Warning: file(dummy.txt): failed to open stream: No such file or directory in dummy.php on line 68 Problème de lecture Problème de lecture $v or die("Problème de lecture") ; or die("Problème de lecture") ; Fichier absent
U TILISATION DE HTTP/1.0 03:32:44 9 Programmation Web Réseau Client Web (Navigateur) Serveur Web (Apache) Connexion TCP (port 80) Validation de la connexion Requête HTTP Réponse HTTP Fermeture de connexion
R EMARQUES IMPORTANTES Le client ouvre la connexion Le client ouvre la connexion Le serveur ferme la connexion Le serveur ferme la connexion 1 transaction = 1 ressource transférée (v 1.0) 1 transaction = 1 ressource transférée (v 1.0) Protocole sans état Protocole sans état Aucune information gardée entre deux transactions Aucune information gardée entre deux transactions Le serveur "oublie" le client après chaque transaction Le serveur "oublie" le client après chaque transaction Problème pour la gestion d'une session Problème pour la gestion d'une session 03:32:45 10 PWB L3 Miage
A UTRES REMARQUES IMPORTANTES Le client demande des ressources Le client demande des ressources Le serveur répond aux demandes des clients : Le serveur répond aux demandes des clients : Délivre la ressource demandée si possible Délivre la ressource demandée si possible Informe de la raison de non remise Informe de la raison de non remise Echanges multi-plateforme Echanges multi-plateforme ASCII 7bits (encodage si non ASCII 7bits) ASCII 7bits (encodage si non ASCII 7bits) Requêtes émises en clair Requêtes émises en clair Réponses émises en clair Réponses émises en clair 03:32:45 11 PWB L3 Miage
C OOKIES But : But : Éviter que le serveur « oublie le client » Éviter que le serveur « oublie le client » Maintenir un « mode connecté » (= session) Maintenir un « mode connecté » (= session) Rendre transparent un échange client / serveur Rendre transparent un échange client / serveur Exemple e-commerce : ajouter des articles au panier Exemple e-commerce : ajouter des articles au panier Serveur : Serveur : Set-Cookie: var=val[; expires=date; path=chemin; domain=domaine] Client : Client : Cookie: var=val; 03:32:45 12 PWB L3 Miage
C OOKIES, PRINCIPE DES ÉCHANGES 03:32:45 13 Programmation Web Réseau Client Web (Navigateur) Serveur Web (Apache) GET / HTTP/1.1 HTTP/ OK Set-Cookie: Id=1212; path=/; GET /liste HTTP/1.1 Cookie: Id=1212 HTTP/ OK … Id=1212; path=/; path=/;
C OOKIES Avantages : Avantages : Rappelle au serveur des informations sur le client Rappelle au serveur des informations sur le client L'échange de la données dans le sens serveur client est limité au dépôt du cookie L'échange de la données dans le sens serveur client est limité au dépôt du cookie Ne nécessite pas de modifier les pages HTML Ne nécessite pas de modifier les pages HTML Compatible avec les formulaires Compatible avec les formulaires Le cookie a une durée de validité Le cookie a une durée de validité Inconvénients : Inconvénients : Les données circulent en permanence dans le sens client serveur Les données circulent en permanence dans le sens client serveur Les données circulent en clair sur le réseau Les données circulent en clair sur le réseau La quantité de données doit être limitée La quantité de données doit être limitée 03:32:45 14 PWB L3 Miage
C OOKIES EN PHP Placer un cookie sur le client : bool setcookie( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly ]]]]]] ) Placer un cookie sur le client : bool setcookie( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly ]]]]]] ) 03:32:45 15 PWB L3 Miage Nom du cookie Valeur du cookie Date d'expiration (timestamp UNIX) : Dans 10 jours : time()+10*24*60*60 Si non précisé, expire à la fermeture du navigateur Chemin de validité, disponibilité : / tout le serveur /prive sous-arborescence "prive" Par défaut : répertoire où le cookie est défini Domaine de validité, disponibilité : example.com le domaine example.com le domaine example.comwww.example.com le sous-domaine le sous-domaine Cookie sécurisé ? true uniquement si HTTPS false défaut, HTTP et HTTPS Cookie uniquement par HTTP ? true uniquement HTTP false défaut, HTTP, JavaScript, …
C OOKIES EN PHP Vérifier la présence d'un cookie : Vérifier la présence d'un cookie : tableau associatif superglobal $_COOKIE tableau associatif superglobal $_COOKIE ex : cookie 'passage' $_COOKIE['passage'] ex : cookie 'passage' $_COOKIE['passage'] Remarques utiles : Remarques utiles : Le cookie doit être placé avant echo (en-tête HTTP) Le cookie doit être placé avant echo (en-tête HTTP) Le cookie placé avec setcookie() n'est accessible qu'au prochain chargement de page : En-tête HTTP Set-Cookie: suivi de l'en-tête HTTP Cookie: à la demande de page suivante Le cookie placé avec setcookie() n'est accessible qu'au prochain chargement de page : En-tête HTTP Set-Cookie: suivi de l'en-tête HTTP Cookie: à la demande de page suivante Effacer un cookie déjà placé : le replacer avec les mêmes paramètres mais avec une valeur vide ou false Effacer un cookie déjà placé : le replacer avec les mêmes paramètres mais avec une valeur vide ou false 03:32:45 16 PWB L3 Miage
S ESSIONS Stockage sur le serveur de données associées à un client particulier Stockage sur le serveur de données associées à un client particulier Nécessite une identification unique pertinente et persistante des clients Nécessite une identification unique pertinente et persistante des clients Identifiant de session (MD5 128bits / SHA-1 160bits) Identifiant de session (MD5 128bits / SHA-1 160bits) Persiste par paramètre d'URL ou cookie Persiste par paramètre d'URL ou cookie Évite l'échange permanent de données (en dehors de l'identifiant) Évite l'échange permanent de données (en dehors de l'identifiant) Nécessite la linéarisation des variables pour leur stockage (fichier, BD, personnalisé) Nécessite la linéarisation des variables pour leur stockage (fichier, BD, personnalisé) Simule un mode connecté Simule un mode connecté 03:32:45 17 PWB L3 Miage
S ESSIONS 03:32:45 18 PWB L3 Miage Réseau Client 1 Serveur A Démarrer session id : A Données de session pour A GET / Set-Cookie: … Cookie: … OK: … Client 2 B Démarrer session id : B Données de session pour B GET / Set-Cookie: … Cookie: … OK: … Cookie id : A Cookie id : B
S ESSIONS Créer ou restaurer une session Créer ou restaurer une session bool session_start ( void ) bool session_start ( void ) Manipuler les données de session Manipuler les données de session Tableau associatif superglobal $_SESSION Tableau associatif superglobal $_SESSION Lire ou définir l'identifiant de session Lire ou définir l'identifiant de session string session_id ( [string id] ) string session_id ( [string id] ) Détruire toutes les variables d'une session Détruire toutes les variables d'une session void session_unset ( void ) void session_unset ( void ) Détruire une session Détruire une session bool session_destroy ( void ) bool session_destroy ( void ) 03:32:45 19 PWB L3 Miage
S ESSIONS Modifie les paramètres du cookie de session void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly ]]]] ) Modifie les paramètres du cookie de session void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly ]]]] ) 03:32:45 20 PWB L3 Miage Date d'expiration (timestamp UNIX) : Dans 10 jours : time()+10*24*60*60 Si non précisé, expire à la fermeture du navigateur Chemin de validité, disponibilité : / tout le serveur /prive sous-arborescence "prive" Par défaut : répertoire où le cookie est défini Domaine de validité, disponibilité : example.com le domaine example.com le domaine example.comwww.example.com le sous-domaine le sous-domaine Cookie sécurisé ? true uniquement si HTTPS false défaut, HTTP et HTTPS Cookie uniquement par HTTP ? true uniquement HTTP false défaut, HTTP, JavaScript, …
P ROCÉDURE D ' AUTHENTIFICATION 03:32:45 21 Programmation Web Réseau Client Serveur Base de données login pass ? Problème Le données circulent en clair sur le réseau Problème Injection de code SQL requêtes préparées requêtes préparées
P ROCÉDURE D ' AUTHENTIFICATION SÉCURISÉE 03:32:45 22 Programmation Web Réseau Client Serveur Base de données Codage ? Problème Injection de code SQL requêtes préparées requêtes préparées challengechallenge Codage donnée login pass donnée challenge Sécurité Le données qui circulent sont propres à chaque connexion Données de session
S ÉRIALISATION D ' OBJETS Les objets peuvent être stockés dans les données de session Les objets peuvent être stockés dans les données de session Linéarisation de l'objet réduit à une chaîne Linéarisation de l'objet réduit à une chaîne Impossible pour le type ressource Impossible pour le type ressource Impossible pour les références croisées Impossible pour les références croisées Restauration possible (PHP >= 4) Restauration possible (PHP >= 4) 03:32:45 23 PWB L3 Miage session_start() ; $p = new Point(12, 15) ; $_SESSION['monpoint'] = $p ; session_start() ; $p = $_SESSION['monpoint'] ;
S ÉRIALISATION D ' OBJETS Méthodes magiques __sleep et __wakeup Méthodes magiques __sleep et __wakeup __sleep __sleep Appelée avant la linéarisation Appelée avant la linéarisation Doit retourner un tableau contenant le nom des attributs à linéariser Doit retourner un tableau contenant le nom des attributs à linéariser Choix des attributs à sauvegarder Choix des attributs à sauvegarder Terminer correctement l'objet (déconnexion BD, ressource ouverte, requête en cours, …) Terminer correctement l'objet (déconnexion BD, ressource ouverte, requête en cours, …) __wakeup __wakeup Appelée après la délinéarisation Appelée après la délinéarisation Restaurer des attributs non sauvegardés (BD, …) Restaurer des attributs non sauvegardés (BD, …) 03:32:45 24 PWB L3 Miage
S ÉRIALISATION : EXEMPLE class Point { private $coord ; private $coord ; private $info ; private $info ; public function __construct($_x, $_y) { public function __construct($_x, $_y) { if (!is_numeric($_x) || !is_numeric($_y)) { if (!is_numeric($_x) || !is_numeric($_y)) { throw new Exception( throw new Exception( "Paramètres non numériques ($_x, $_y)") ; "Paramètres non numériques ($_x, $_y)") ; } } $this->coord['x'] = $_x ; $this->coord['x'] = $_x ; $this->coord['y'] = $_y ; $this->coord['y'] = $_y ; $this->info = 'Nouveau' ; $this->info = 'Nouveau' ; }… 03:32:45 25 PWB L3 Miage
S ÉRIALISATION : EXEMPLE public function __get($_prop) { public function __get($_prop) { if (!array_key_exists($_prop, $this->coord)) { if (!array_key_exists($_prop, $this->coord)) { throw new Exception( throw new Exception( "Accès à une propriété inconnue ($_prop)") ; "Accès à une propriété inconnue ($_prop)") ; } return $this->coord[$_prop] ; return $this->coord[$_prop] ; } public function __set($_prop, $_val) { public function __set($_prop, $_val) { if (!is_numeric($_val)) if (!is_numeric($_val)) throw new Exception("Valeur non numérique ($_val)"); throw new Exception("Valeur non numérique ($_val)"); if (!array_key_exists($_prop, $this->coord)) if (!array_key_exists($_prop, $this->coord)) throw new Exception( throw new Exception( "Accès à une propriété inconnue ($_prop)") ; "Accès à une propriété inconnue ($_prop)") ; return $this->coord[$_prop] = $_val ; return $this->coord[$_prop] = $_val ;} 03:32:45 26 PWB L3 Miage
S ÉRIALISATION : EXEMPLE public function __sleep() { public function __sleep() { return array('coord') ; return array('coord') ; } public function __wakeup() { public function __wakeup() { $this->info = 'Restauré' ; $this->info = 'Restauré' ; } public function affiche() { public function affiche() { echo " \n" ; echo " \n" ; var_dump($this) ; var_dump($this) ; echo " \n" ; echo " \n" ; }} 03:32:45 27 PWB L3 Miage
S ÉRIALISATION : EXEMPLE <?php require_once('point.inc.php') ; session_start() ; $p = new Point(1, 12) ; $_SESSION['point'] = $p ; ?><?php require_once('point.inc.php') ; session_start() ; $p = $_SESSION['point'] ; $p->affiche() ; ?> 03:32:45 28 PWB L3 Miage Linéarisation : appel de __sleep() Délinéarisation : appel de __wakeup() object(Point)#1 (2) { ["coord:private" ["coord:private" => array(2) { => array(2) { ["x"]=> int(1) ["x"]=> int(1) ["y"]=> int(12) } ["y"]=> int(12) } ["info:private"]=> ["info:private"]=> string(8) "Restauré" string(8) "Restauré"} public function __wakeup() { public function __wakeup() { $this->info = 'Restauré' ; $this->info = 'Restauré' ; }
SYSTÈME DE FICHIERS L'accès au système de fichiers en PHP est réalisé par le moteur PHP. Plus précisément, c'est le serveur Web qui accède aux fichiers. Ce sont donc les droits d'accès de l'utilisateur "web" qui sont mis en jeu avec toutes les limitations que cela comporte ! L'accès au système de fichiers en PHP est réalisé par le moteur PHP. Plus précisément, c'est le serveur Web qui accède aux fichiers. Ce sont donc les droits d'accès de l'utilisateur "web" qui sont mis en jeu avec toutes les limitations que cela comporte ! Les pseudo-types présentés dans les diapositives suivantes sont donnés à titre informatif. Les pseudo-types présentés dans les diapositives suivantes sont donnés à titre informatif. Toutes les fonctions travaillent à partir du répertoire courant (par défaut, celui du script) Toutes les fonctions travaillent à partir du répertoire courant (par défaut, celui du script) Les fonctions présentées retournent souvent false en cas d'échec et affichent parfois des avertissements dans ce cas Les fonctions présentées retournent souvent false en cas d'échec et affichent parfois des avertissements dans ce cas 03:32:45 29 PWB L3 Miage
F ONCTIONS " COMMANDE SHELL " chmod :modifier les droits d'accès chmod :modifier les droits d'accès chown :modifier le propriétaire chown :modifier le propriétaire chgrp :modifier le groupe chgrp :modifier le groupe mkdir :créer un répertoire mkdir :créer un répertoire rmdir :détruire un répertoire rmdir :détruire un répertoire copy :copier un fichier copy :copier un fichier basename :donner le nom d'un fichier basename :donner le nom d'un fichier dirname :donner le chemin d'un fichier dirname :donner le chemin d'un fichier link :créer un lien physique link :créer un lien physique symlink :créer un lien symbolique symlink :créer un lien symbolique unlink :détruire un lien unlink :détruire un lien touch :changer la date de modification touch :changer la date de modification 03:32:45 30 PWB L3 Miage
F ONCTIONS " COMMANDE SHELL " bool chmod ( string filename, int mode ) remplace le mode de filename par le mode mode ex : chmod("foo.txt", 0644) ; bool chown ( string filename, mixed user ) change le groupe propriétaire courant du fichier filename en user ex : chown("foo.txt", "cutrona") ; bool chgrp ( string filename, mixed group ) remplace le groupe propriétaire courant du fichier filename par group ex : chgrp("foo.txt", "prof") ; 03:32:45 31 PWB L3 Miage
F ONCTIONS " COMMANDE SHELL " bool mkdir (string pathname [, int mode [, bool recursive ]]) crée un répertoire pathname avec le mode mode de façon récursive ex : mkdir("rep12", 0755) ; bool rmdir ( string dirname ) efface le répertoire dont le chemin est dirname. Le répertoire doit être vide ex : rmdir("rep12") ; bool copy ( string source, string dest ) effectue une copie du fichier source vers le fichier dest ex : copy("fic.txt", "copie_fic.txt") ; 03:32:45 32 PWB L3 Miage
F ONCTIONS " COMMANDE SHELL " string basename ( string path [, string suffix ] ) extrait le nom du fichier (au sens large) dans le chemin path. Si suffix est fourni, il sera supprimé dans le nom du fichier ex : basename("/home/prof/cutrona/public_html") ; public_html public_html string dirname ( string path ) donne le chemin du fichier (au sens large) contenu dans path ex : dirname("/home/prof/cutrona/public_html") ; /home/prof/cutrona /home/prof/cutrona 03:32:45 33 PWB L3 Miage
F ONCTIONS " COMMANDE SHELL " bool link ( string target, string link ) crée un lien de nom link vers le fichier destination existant target ex : link("foo.txt", "bob") ; bool symlink ( string target, string link ) crée un lien symbolique de nom link vers le fichier destination existant target ex : symlink("foo.txt", "bob") ; bool unlink ( string filename ) efface le fichier filename ex : unlink("foo.txt") ; 03:32:45 34 PWB L3 Miage
F ONCTIONS " COMMANDE SHELL " bool touch ( string filename [, int time [, int atime ]] ) tente de forcer la date de modification du fichier désigné par le paramètre filename à la date de spécifiée par le paramètre time. Le troisième paramètre atime est utilisé comme date de dernier accès. Si le fichier n'existe pas, PHP tente de le créer time et atime sont des timestamp UNIX (nombre de secondes depuis le 1er Janvier :00:00 GMT) int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst ]]]]]]] ) int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst ]]]]]]] ) crée un timestamp UNIX correspondant aux paramètres 03:32:45 35 PWB L3 Miage
F ONCTIONS INFORMATIVES file_exists :fichier existe ? file_exists :fichier existe ? is_dir :est un répertoire ? is_dir :est un répertoire ? is_file :est un fichier régulier ? is_file :est un fichier régulier ? is_link :est un lien symbolique ? is_link :est un lien symbolique ? filetype :type de fichier filetype :type de fichier is_readable :est lisible ? is_readable :est lisible ? is_executable :est exécutable ? is_executable :est exécutable ? is_writ[e]able :peut être modifié ? is_writ[e]able :peut être modifié ? 03:32:45 36 PWB L3 Miage
F ONCTIONS INFORMATIVES disk_free_space :espace disponible disk_free_space :espace disponible disk_total_space :espace occupé disk_total_space :espace occupé filesize :taille du fichier filesize :taille du fichier fileatime :date d'accès fileatime :date d'accès filectime :date de changement filectime :date de changement filemtime :date de modification filemtime :date de modification fileowner :propriétaire fileowner :propriétaire filegroup :groupe filegroup :groupe fileperms :droits d'accès fileperms :droits d'accès 03:32:45 37 Programmation Web
F ONCTIONS INFORMATIVES bool file_exists ( string filename ) retourne true si le fichier filename existe, et false sinon ex : file_exists("foo.txt") ; bool is_dir ( string filename ) retourne true si filename existe et est un dossier ex : is_dir("progweb1A") ; bool is_file ( string filename ) retourne true si filename existe et est un fichier régulier ex : is_file("index.php") ; 03:32:45 38 Programmation Web
F ONCTIONS INFORMATIVES bool is_link ( string filename ) retourne true si filename existe et est un lien symbolique ex : is_link("progweb1A/Cours") ; string filetype ( string filename ) renvoie le type du fichier filename. Réponses possibles : fifo :file UNIX fifo :file UNIX char :fichier spécial de type caractère char :fichier spécial de type caractère dir :répertoire dir :répertoire block :fichier spécial de type bloc block :fichier spécial de type bloc link :lien symbolique link :lien symbolique file :fichier régulier file :fichier régulier unknown :inconnu unknown :inconnu 03:32:45 39 Programmation Web
F ONCTIONS INFORMATIVES bool is_readable ( string filename ) retourne true si le fichier ou le dossier filename existe et est accessible en lecture. ex : is_readable("foo.txt") ; bool is_writ[e]able ( string filename ) retourne true si filename existe et est accessible en écriture. ex : is_writable("foo.txt") ; bool is_executable ( string filename ) retourne true si filename existe et est exécutable. ex : is_executable("index.php") ; 03:32:45 40 Programmation Web
F ONCTIONS INFORMATIVES float disk_free_space ( string directory ) retourne le nombre d'octets disponibles sur le disque contenant le dossier directory ex : disk_free_space("/home/prof/cutrona/public_html") ; float disk_total_space ( string directory ) lit récursivement toutes les tailles du dossier directory et retourne la somme ex : disk_total_space("/home/prof/cutrona/public_html") ; int filesize ( string filename ) renvoie la taille du fichier filename ex : filesize("index.php") ; 03:32:45 41 Programmation Web
F ONCTIONS INFORMATIVES int fileatime ( string filename ) renvoie la date de dernier accès au contenu de filename ex : fileatime("index.php") ; int filectime ( string filename ) renvoie la date à laquelle les propriétés du fichier filename ont été changées pour la dernière fois ex : filectime("index.php") ; ex : filectime("index.php") ; int filemtime ( string filename ) renvoie la date de dernière modification du contenu du fichier filename ex : filemtime("index.php") ; 03:32:45 42 Programmation Web
F ONCTIONS INFORMATIVES int fileowner ( string filename ) renvoie l' uid du propriétaire du fichier filename array posix_getpwuid ( int uid ) array posix_getpwuid ( int uid ) ex : fileowner("index.php") ; int filegroup ( string filename ) renvoie le gid groupe qui possède le fichier filename array posix_getgrgid ( int gid ) array posix_getgrgid ( int gid ) ex : filegroup("index.php") ; ex : filegroup("index.php") ; int fileperms ( string filename ) renvoie les permissions affectées au fichier filename ex : fileperms("index.php") ; 03:32:45 43 Programmation Web
F ONCTIONS DE LECTURE / ÉCRITURE readfile :contenu sortie std readfile :contenu sortie std file_get_contents :contenu chaîne file_get_contents :contenu chaîne file :contenu tableau file :contenu tableau fopen :ouvrir un fichier fopen :ouvrir un fichier fread :lire dans un fichier ouvert fread :lire dans un fichier ouvert fwrite :écrire dans un fichier ouvert fwrite :écrire dans un fichier ouvert fseek :se déplacer dans un fichier fseek :se déplacer dans un fichier ftell :position dans un fichier ftell :position dans un fichier fgetc :lire un caractère fgetc :lire un caractère fgets :lire une ligne fgets :lire une ligne fclose :fermeture d'un fichier fclose :fermeture d'un fichier 03:32:45 44 Programmation Web
F ONCTIONS DE LECTURE / ÉCRITURE 03:32:45 45 Programmation Web Fichier Curseur Fichier Curseur Lecture Écriture avec remplacement Fichier Curseur destruction Fichier Curseur ajout seul
F ONCTIONS DE LECTURE int readfile ( string filename ) lit le fichier filename et l'envoie sur la sortie standard. retourne le nombre d'octets lus depuis le fichier ex : readfile("index.html") ; string file_get_contents ( string filename ) lit le fichier filename et place son contenu dans une chaîne ex : $s = file_get_contents("liste.txt") ; array file ( string filename ) lit le fichier filename et place son contenu dans un tableau dont chaque élément contient une ligne du fichier ex : $t = file("liste.txt") ; 03:32:45 46 Programmation Web
F ONCTIONS DE LECTURE / ÉCRITURE resource fopen ( string filename, string mode ) crée une ressource nommée, spécifiée par le paramètre filename, sous la forme d'un flux ouvert selon le mode ex : $fp = fopen("index.html", 'r+') ; 03:32:45 47 Programmation Web ModeDescription 'r' Lecture, curseur au début 'r+' Lecture/écriture, curseur au début 'w' Écriture, curseur au début, RAZ 'w+' Lecture/écriture, curseur au début, RAZ 'a' Écriture, curseur à la fin, fseek HS 'a+' Lecture/écriture, curseur à la fin, fseek HS 'x' Création, écriture, échec si existe 'x+' Création, lecture/écriture, échec si existe
F ONCTIONS DE LECTURE / ÉCRITURE string fread ( resource handle, int length ) lit jusqu'à length octets dans le fichier référencé par handle int fwrite ( resource handle, string string [, int length ] ) écrit le contenu de la chaîne string dans le fichier référencé par handle à concurrence de length octets, ou de la taille de la chaîne string bool fclose ( resource handle ) ferme le fichier référencé par handle 03:32:45 48 Programmation Web
F ONCTIONS DE LECTURE / ÉCRITURE int fseek ( resource handle, int offset [, int whence ] ) modifie le curseur de position dans le fichier référencé par handle. La nouvelle position mesurée en octets à partir du début du fichier, est obtenue en additionnant la distance offset à la position whence : SEEK_SET - Position finale = offset octets. SEEK_SET - Position finale = offset octets. SEEK_CUR - Position finale = position courante + offset octets. SEEK_CUR - Position finale = position courante + offset octets. SEEK_END - Position finale = position fin du fichier + offset. SEEK_END - Position finale = position fin du fichier + offset. int ftell ( resource handle ) retourne la position courante, en octets, du curseur dans le fichier référencé par handle 03:32:45 49 Programmation Web
F ONCTIONS DE LECTURE / ÉCRITURE string fgetc ( resource handle ) retourne une chaîne contenant un seul caractère, lu depuis le fichier référencé par handle string fgets ( resource handle [, int length ] ) retourne une ligne du fichier référencé par handle jusqu'à la longueur maximale length - 1 octets 03:32:45 50 Programmation Web
E XEMPLE DE BOUCLE DE LECTURE // Tentative d'ouverture du fichier if ($h "r")) { // Lecture du fichier ligne à ligne // Lecture du fichier ligne à ligne while (($ligne = fgets($h)) !== false) { while (($ligne = fgets($h)) !== false) { // Utilisation de $ligne // Utilisation de $ligne } // Fermeture // Fermeture fclose($h) ; fclose($h) ;} 03:32:45 51 Programmation Web
F ONCTIONS DE RECHERCHE fnmatch :contrôle de motif fnmatch :contrôle de motif glob :recherche de chemins glob :recherche de chemins 03:32:45 52 Programmation Web
CONTRÔLE DE MOTIF bool fnmatch ( string mo, string ch [, int flag ] ) vérifie si la chaîne ch correspond au motif mo. fnmatch utilise une forme simple d'expressions régulières équivalentes à celles utilisés en Shell UNIX. ex : fnmatch("*gr[ae]y", $color) 03:32:45 53 Programmation Web
R ECHERCHE DE CHEMINS array glob ( string mo [, int flag ] ) recherche tous les chemins correspondant au motif mo. retourne un tableau contenant les noms des chemins trouvés valeurs possibles de flag : GLOB_NOSORT – Pas de tri GLOB_NOSORT – Pas de tri GLOB_NOESCAPE – Pas de protection des méta- caractère avec un anti-slash GLOB_NOESCAPE – Pas de protection des méta- caractère avec un anti-slash GLOB_BRACE – Remplace {a,b,c} par 'a', 'b' ou 'c' GLOB_BRACE – Remplace {a,b,c} par 'a', 'b' ou 'c' GLOB_ONLYDIR – Ne retourne que les dossiers GLOB_ONLYDIR – Ne retourne que les dossiers 03:32:45 54 Programmation Web
PHP & M Y SQL 55/154
P RÉSENTATION MySQL est une base de données implémentant le langage de requête SQL un langage relationnel très connu. Cette partie suppose connue les principes des bases de données relationnelles. MySQL est une base de données implémentant le langage de requête SQL un langage relationnel très connu. Cette partie suppose connue les principes des bases de données relationnelles. phpMyAdmin qui permet ladministration aisée des bases de données MySQL avec php. phpMyAdmin qui permet ladministration aisée des bases de données MySQL avec php. Avec MySQL vous pouvez créer plusieurs bases de données sur un serveur. Une base est composée de tables contenant des enregistrements. Avec MySQL vous pouvez créer plusieurs bases de données sur un serveur. Une base est composée de tables contenant des enregistrements. 56/1 54
FONCTIONS DE C ONNEXION mysql_connect($server,$user,$password) : permet de se connecter au serveur $server en tant quutilisateur $user avec le mot de passe $password, retourne lidentifiant de connexion si succès, FALSE sinon mysql_connect($server,$user,$password) : permet de se connecter au serveur $server en tant quutilisateur $user avec le mot de passe $password, retourne lidentifiant de connexion si succès, FALSE sinon mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne TRUE en cas de succès, sinon FALSE mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne TRUE en cas de succès, sinon FALSE mysql_close([$id]) : permet de fermer la connexion mysql_close([$id]) : permet de fermer la connexion 57/1 54
E XEMPLE Exemple 1 : if( $id = mysql_connect(localhost,foobar,0478) ) { if( $id_db = mysql_select_db(gigabase) ) { echo Succès de connexion.; /* code du script … */ } else { die(Echec de connexion à la base.); } mysql_close($id); } else { die(Echec de connexion au serveur de base de données.); } 58/1 54
UNE AUTRE FACON Exemple 2 or die(Echec de connexion au or die(Echec de sélection de la base.); Cet exemple est équivalent au précédent mais plus court à écrire. Le (arobase) permet déviter le renvoie de valeur par la fonction quil précède. On pourra avantageusement intégrer ce code dans un fichier que lon pourra joindre par include(). Cest aussi un moyen de sécuriser le mot de passe de connexion. 59/1 54
I NTERROGATION Pour envoyer une requête à une base de donnée, il existe la fonction : mysql_query($str) Les requêtes les plus couramment utilisées sont : CREATE (création dune table), SELECT (sélection), INSERT (insertion), UPDATE (mise à jour des données), DELETE (suppression), ALTER (modification dune table), etc. $result = mysql_query(SELECT address FROM users WHERE name=\$name\); Attention, contrairement à Oracle SQL, les requêtes MySQL ne se terminent pas par un point virgule ; et nautorisent pas les SELECT imbriqués. 60/1 54
E XTRACTION DES DONNÉES Sous MySQL, laffichage des résultats dune requête se fait ligne par ligne. Une boucle permettra de recueillir chacune des lignes à partir de lidentifiant de résultat. SQL > SELECT * FROM users; ID NAME ADDRESS Boris Moscou 1ère ligne 2 Bill Washington 2ème ligne 3 William London 3è ligne 61/1 54
E XTRACTION DES DONNÉES mysql_fetch_row($result) : retourne une ligne de résultat sous la forme dun tableau. Les éléments du tableau étant les valeurs des attributs de la ligne. Retourne FALSE sil ny a plus aucune ligne. $requet = SELECT * FROM users; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_row($result)) { $id = $ligne[0]; $name = $ligne[1]; $address = $ligne[2]; echo $id - $name, $address ; }} else { echo Erreur de requête de base de données.;} 62/1 54
E XTRACTION DES DONNÉES mysql_fetch_array($result) : retourne un tableau associatif. Les clés étant les noms des attributs et leurs valeurs associées leurs valeurs respectives. Retourne FALSE sil ny a plus aucune ligne. $requet = SELECT * FROM users; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_array($result)) { $id = $ligne[id]; $name = $ligne[name]; $address = $ligne[address]; echo $id - $name, $address ; } } else { echo Erreur de requête de base de données.; } Ici, on accède aux valeurs de la ligne par lattribut dans le tableau associatif. 63/1 54
E XTRACTION DES DONNÉES mysql_fetch_object($result) : retourne un objet. Les attributs de lobjet correspondent à ceux de la ligne de résultat. Et les valeurs des attributs de lobjet correspondent à ceux de la ligne de résultat. Retourne FALSE sil ny a plus aucune ligne. $requet = SELECT * FROM users; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_object($result)) { $id = $ligne->id; $name = $ligne->name; $address = $ligne->address; echo $id - $name, $address ; } } else { echo Erreur de requête de base de données.; } Ici, on accède aux valeurs par leur attribut dans lobjet. 64/1 54
F ONCTIONS ADDITIONNELLES mysql_free_result($result) : efface de la mémoire du serveur les lignes de résultat de la requête identifiées par $requet. Très utile pour améliorer les performances du serveur. mysql_insert_id([$id]) : retourne lidentifiant dun attribut clé primaire AUTO_INCREMENT de la dernière insertion. mysql_num_fields($result) : retourne le nombre dattributs du résultats. mysql_num_rows($result) : retourne le nombre de lignes du résultats. Et ainsi permet de remplacer le while par un for. Evitez de polluer votre page avec des Warnings. 65/1 54
PHP M Y A DMIN 03:32:45 Programmation Web
PHP M Y A DMIN Interface Web pour MySQL écrite en PHP Projet open source : Fonctionnalités : Affichage / création / modification de tables Affichage / insertion / suppression des contenus Recherches / Requêtes Importation / exportation de tables / base / données Optimisation de tables / base Moteur MyISAM ( 5.5) : relationnel, transactionnel, plain text, très rapide Moteur INNODB (5.5 ) : relationnel, transactionnel, ACID, moins rapide 03:32:45 67 Programmation Web
C ONNEXION 03:32:45 68 Programmation Web Login : votre login habituel Mot de passe : votre login habituel Base de données : votre login habituel
A CCUEIL VERSION 2 03:32:45 69 Programmation Web
A CCUEIL VERSION :32:45 70 Programmation Web
S TRUCTURE D UNE BASE 03:32:45 71 Programmation Web Afficher Structure Rechercher Insérer Vider Supprimer
REQUÊTE DANS LA BASE 03:32:45 72 Programmation Web
R ECHERCHE DANS LA BASE 03:32:45 73 Programmation Web
REQUÊTE ASSISTÉE DANS LA BASE 03:32:45 74 Programmation Web
A FFICHER LE CONTENU D ' UNE TABLE 03:32:45 75 Programmation Web
S TRUCTURE D ' UNE TABLE 03:32:45 76 Programmation Web
REQUÊTE SUR UNE TABLE 03:32:45 77 Programmation Web
R ECHERCHE DANS UNE TABLE 03:32:45 78 Programmation Web
I NSERTION DE DONNÉES DANS UNE TABLE 03:32:45 79 Programmation Web
E XPORTATION DE DONNÉES / BASE 03:32:45 80 Programmation Web
I MPORTATION DE DONNÉES / BASE 03:32:45 81 Programmation Web
O PÉRATIONS SUR UNE TABLE 03:32:45 82 Programmation Web
C ONCEPTEUR 03:32:45 83 Programmation Web