83
PHP SÉANCE 2 PHP SÉANCE 2 PHP avancé PHP avancé 16:47:56 16:47:56 PWB L3 Mioage PWB L3 Mioage 1

PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

Embed Size (px)

Citation preview

Page 1: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

PHP SÉANCE 2PHP SÉANCE 2PHP avancé PHP avancé

03:21:5003:21:50 PWB L3 MioagePWB L3 Mioage 11

Page 2: 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

22

PWB L3 Miage

PWB L3 Miage

Page 3: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

INCLUDE ET REQUIRE03:21:50

03:21:50

33

Programmation Web 2011-2012

Programmation Web 2011-2012

Fichier mafonction.phpFichier mafonction.phpFichier mafonction.phpFichier mafonction.php<?<?functionfunction mafonction mafonction(($$argarg)){{ ifif ((issetisset(($$argarg)))) {{ echoecho ((""VraiVrai"")) ; ; }} elseelse {{ echoecho ((""FauxFaux"")) ; ; }}}}?>?>

Fichier utilisation1.phpFichier utilisation1.phpFichier utilisation1.phpFichier utilisation1.php……requirerequire("mafonction.php")("mafonction.php")mafonction(true) ;mafonction(true) ;……Fichier utilisation2.phpFichier utilisation2.phpFichier utilisation2.phpFichier utilisation2.php……includeinclude("mafonction.php")("mafonction.php")……$var=false ;$var=false ;mafonction($var) ;mafonction($var) ;……Fichier utilisation3.phpFichier utilisation3.phpFichier utilisation3.phpFichier utilisation3.php……requirerequire("mafonction.php")("mafonction.php")……

Page 4: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

DÉFINITION DE CONSTANTES

<?php

define("ma_constante", "Bonjour à tous") ;

echo ma_constante ;

?>44

PWB L3 Miage

PWB L3 Miage

Définition d'une constanteDéfinition d'une constanteDéfinition d'une constanteDéfinition d'une constante

Utilisation de la constanteUtilisation de la constanteUtilisation de la constanteUtilisation de la constante

nomnomnomnom valeurvaleurvaleurvaleur

Page 5: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

GESTION DES ERREURS

Dans certains cas, il n’est ni possible ni utile de poursuivre l’exécution du code PHP (variables non définies, valeurs erronées, échec de connexion, …)

Arrêt brutal de l’exécution du code: die(message) exit(message)

Envoie message au navigateur et termine l’exécution du script courant

03:21:50

03:21:50

55

PWB L3 Miage

PWB L3 Miage

Page 6: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

03:21:50

03:21:50

66

PWB L3 Miage

PWB L3 Miage

Gestion des erreurs – (Mauvais) ExempleGestion des erreurs – (Mauvais) Exemple

<?php<?php$$html html = = <<<<<<HTMLHTML<<htmlhtml>><<headhead>><<titletitle>>die-exitdie-exit</</titletitle>></</headhead>><<bodybody>>HTMLHTML;;ifif ((!!issetisset(($$valval)) {)) { diedie(($$htmlhtml..""problème valproblème val"")) ; ; /* Au delà de ce point,/* Au delà de ce point, fin du script */fin du script */}}$$html html .=.= <<<<<<HTMLHTMLChoix: Choix: $$valval</</bodybody>></</htmlhtml>>

<<htmlhtml>><<headhead>><<titletitle>>die-exitdie-exit</</titletitle>></</headhead>><<bodybody>>problème valproblème val

PHPPHP HTMLHTML

NavigateurNavigateur

problème valproblème val

HTML non HTML non validevalide……HTML non HTML non validevalide……

Page 7: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

GESTION DE L'AFFICHAGE DES ERREURS int error_reporting ( [int level] )

03:21:50

03:21:50

77

PWB L3 Miage

PWB L3 Miage

php.iniphp.iniphp.iniphp.ini

ConstanteConstante

E_ERROR E_ERROR

E_WARNING E_WARNING

E_PARSE E_PARSE

E_NOTICE E_NOTICE

E_CORE_ERROR E_CORE_ERROR

E_CORE_WARNING E_CORE_WARNING

E_COMPILE_ERROR E_COMPILE_ERROR

E_COMPILE_WARNING E_COMPILE_WARNING

E_USER_ERROR E_USER_ERROR

E_USER_WARNING E_USER_WARNING

E_USER_NOTICE E_USER_NOTICE

E_ALL E_ALL

E_STRICT E_STRICT

Ancien niveau d'erreurAncien niveau d'erreurAncien niveau d'erreurAncien niveau d'erreur

Sur un serveur en Sur un serveur en production, production, toute toute erreur affichéeerreur affichée

donne des indices sur donne des indices sur les scripts et les scripts et rend le rend le

site vulnérablesite vulnérable

Sur un serveur en Sur un serveur en production, production, toute toute erreur affichéeerreur affichée

donne des indices sur donne des indices sur les scripts et les scripts et rend le rend le

site vulnérablesite vulnérable

display_errorsdisplay_errors booleandisplay_errorsdisplay_errors boolean

Déb

og

agD

ébo

gag

ee

Page 8: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

OPÉRATEUR DE CONTRÔLE D'ERREUR

$v = file("dummy.txt")

or die("Problème de lecture") ;

03:21:50

03:21:50

88

PWB L3 Miage

PWB L3 Miage

WarningWarning: file(dummy.txt): failed to open : file(dummy.txt): failed to open stream: No such file or directory in stream: No such file or directory in dummy.phpdummy.php on line on line 6868Problème de lectureProblème de lecture

WarningWarning: file(dummy.txt): failed to open : file(dummy.txt): failed to open stream: No such file or directory in stream: No such file or directory in dummy.phpdummy.php on line on line 6868Problème de lectureProblème de lecture

Problème de lectureProblème de lectureProblème de lectureProblème de lecture

$$vv == @ @filefile((""dummy.txtdummy.txt""))

oror diedie((""Problème de lectureProblème de lecture"")) ; ;

Fichier absentFichier absentFichier absentFichier absent

Page 9: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

UTILISATION DE HTTP/1.0UTILISATION DE HTTP/1.003:21:50

03:21:50

99

Programmation Web 2010-2011

Programmation Web 2010-2011

RéseauRéseauClient WebClient Web

(Navigateur)(Navigateur)Serveur WebServeur Web

(Apache)(Apache)

Connexion TCP (port 80)Connexion TCP (port 80)

Validation de la connexionValidation de la connexion

Requête HTTPRequête HTTP

Réponse HTTPRéponse HTTPFermeture de connexionFermeture de connexion

Page 10: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

REMARQUES IMPORTANTESREMARQUES IMPORTANTES Le client ouvre la connexionLe client ouvre la connexion Le serveur ferme la connexionLe 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 étatProtocole sans état

Aucune information gardée entre deux Aucune information gardée entre deux transactionstransactions

Le serveur "oublie" le client après chaque Le serveur "oublie" le client après chaque transactiontransaction

Problème pour la gestion d'une sessionProblème pour la gestion d'une session

03:21:50

03:21:50

1010

PWB L3 Miage

PWB L3 Miage

Page 11: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

AUTRES REMARQUES AUTRES REMARQUES IMPORTANTESIMPORTANTES Le client demande des ressourcesLe client demande des ressources Le serveur répond aux demandes des Le serveur répond aux demandes des

clients :clients : Délivre la ressource demandée si possibleDélivre la ressource demandée si possible Informe de la raison de non remiseInforme de la raison de non remise

Echanges multi-plateformeEchanges multi-plateforme

ASCII 7bits (encodage si non ASCII 7bits)ASCII 7bits (encodage si non ASCII 7bits)

Requêtes émises en clairRequêtes émises en clair Réponses émises en clairRéponses émises en clair

03:21:50

03:21:50

1111

PWB L3 Miage

PWB L3 Miage

Page 12: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

COOKIESCOOKIES 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 / serveurRendre transparent un échange client / serveur Exemple e-commerce : ajouter des articles au Exemple e-commerce : ajouter des articles au

panierpanier

Serveur :Serveur :Set-Cookie: Set-Cookie: varvar==valval[[; expires=; expires=datedate; ; path=path=cheminchemin; domain=; domain=domainedomaine]]

Client :Client :Cookie: Cookie: varvar==valval;;

03:21:50

03:21:50

1212

PWB L3 Miage

PWB L3 Miage

Page 13: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

COOKIES, PRINCIPE DES COOKIES, PRINCIPE DES ÉCHANGESÉCHANGES

03:21:50

03:21:50

1313

Programmation Web 2010-2011

Programmation Web 2010-2011

RéseauRéseauClient WebClient Web

(Navigateur)(Navigateur)Serveur WebServeur Web

(Apache)(Apache)

GET / HTTP/1.1GET / HTTP/1.1

HTTP/1.1 200 OKHTTP/1.1 200 OKSet-CookieSet-Cookie: Id=1212; path=/;: Id=1212; path=/;

GET /liste HTTP/1.1GET /liste HTTP/1.1CookieCookie: Id=1212: Id=1212

HTTP/1.1 200 OKHTTP/1.1 200 OK……

Id=1212;Id=1212; path=/;path=/;

Page 14: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

COOKIESCOOKIES

Avantages :Avantages : Rappelle au serveur des informations sur le clientRappelle au serveur des informations sur le client L'échangeL'échange de la données dans le sens de la données dans le sens

serveur serveur client client est est limitélimité au dépôt du cookie au dépôt du cookie Ne nécessite Ne nécessite paspas de de modifiermodifier les les pagespages HTMLHTML CompatibleCompatible avec les avec les formulairesformulaires Le Le cookiecookie a une a une durée de validitédurée de validité

Inconvénients :Inconvénients : Les Les données circulent en permanencedonnées circulent en permanence dans le dans le

sens sens client client serveur serveur Les Les données circulent en clairdonnées circulent en clair sur le réseau sur le réseau La La quantitéquantité de données doit être de données doit être limitéelimitée

03:21:50

03:21:50

1414

PWB L3 Miage

PWB L3 Miage

Page 15: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

COOKIES EN PHPCOOKIES EN PHP

Placer un cookie sur le client :Placer un cookie sur le client :boolbool setcookiesetcookie( ( stringstring namename [, [, stringstring valuevalue [, [, intint expireexpire [, [, stringstring pathpath [, [, stringstring domaindomain [, [, boolbool securesecure [, [, boolbool httponlyhttponly ]]]]]] ) ]]]]]] )

03:21:50

03:21:50

1515

PWB L3 Miage

PWB L3 Miage

Nom du cookieNom du cookieValeur du cookieValeur du cookieDate d'expiration (timestamp UNIX) :Date d'expiration (timestamp UNIX) :Dans 10 jours : time()+10*24*60*60Dans 10 jours : time()+10*24*60*60Si non précisé, expire à la fermeture du Si non précisé, expire à la fermeture du navigateurnavigateur

Chemin de validité, disponibilité :Chemin de validité, disponibilité :// tout le serveur tout le serveur/prive/prive sous-arborescence "prive" sous-arborescence "prive"Par défaut : répertoire où le cookie est définiPar défaut : répertoire où le cookie est défini

Domaine de validité, disponibilité :Domaine de validité, disponibilité :example.comexample.com le domaine example.comle domaine example.comwww.example.comwww.example.com le sous-domaine www.example.comle sous-domaine www.example.com

Cookie sécurisé ?Cookie sécurisé ?truetrue uniquement si HTTPS uniquement si HTTPSfalsefalse défaut, HTTP et HTTPS défaut, HTTP et HTTPS

Cookie uniquement par HTTP ?Cookie uniquement par HTTP ?truetrue uniquement HTTP uniquement HTTPfalsefalse défaut, HTTP, JavaScript, … défaut, HTTP, JavaScript, …

Page 16: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

COOKIES EN PHPCOOKIES EN PHP

Vérifier la présence d'un cookie :Vérifier la présence d'un cookie : tableau associatif superglobal tableau associatif superglobal $_COOKIE$_COOKIE ex : cookie 'passage' ex : cookie 'passage' $_COOKIE['passage']$_COOKIE['passage']

Remarques utiles :Remarques utiles : Le Le cookiecookie doit être doit être placéplacé avant avant echoecho (en-tête (en-tête

HTTP)HTTP) Le Le cookiecookie placé avec placé avec setcookie()setcookie() n'est n'est

accessibleaccessible qu' qu'auau prochainprochain chargementchargement de page : de page :En-tête HTTP Set-Cookie: suivi de l'en-tête HTTP En-tête HTTP Set-Cookie: suivi de l'en-tête HTTP Cookie: à la demande de page suivanteCookie: à la demande de page suivante

EffacerEffacer unun cookiecookie déjà placé : déjà placé :le replacer avec les le replacer avec les mêmesmêmes paramètresparamètres mais mais avec une avec une valeurvaleur videvide ou false ou false

03:21:50

03:21:50

1616

PWB L3 Miage

PWB L3 Miage

Page 17: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SESSIONSSESSIONS

Stockage sur le serveurStockage sur le serveur de de données données associées à un clientassociées à un client particulier particulier

Nécessite une Nécessite une identification unique identification unique pertinente et persistante des clientspertinente et persistante des clients Identifiant de sessionIdentifiant de session (MD5 128bits / SHA-1 (MD5 128bits / SHA-1

160bits)160bits) Persiste par Persiste par paramètre d'URLparamètre d'URL ou ou cookiecookie

Évite l'échange permanent de donnéesÉvite l'échange permanent de données (en (en dehors de l'identifiant)dehors de l'identifiant)

Nécessite la Nécessite la linéarisationlinéarisation desdes variablesvariables pour pour leur stockage (fichier, BD, personnalisé)leur stockage (fichier, BD, personnalisé)

Simule un Simule un mode connectémode connecté

03:21:50

03:21:50

1717

PWB L3 Miage

PWB L3 Miage

Page 18: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SESSIONSSESSIONS03:21:50

03:21:50

1818

PWB L3 Miage

PWB L3 Miage

RéseauRéseau

Client 1Client 1

ServeurServeur

AA

Démarrer sessionDémarrer sessionid : Aid : A

Données deDonnées desession pour Asession pour A

GET /GET /Set-Cookie: …Set-Cookie: …Cookie: …Cookie: …OK: …OK: …

Client 2Client 2

BB

Démarrer sessionDémarrer sessionid : Bid : B

Données deDonnées desession pour Bsession pour B

GET /GET /Set-Cookie: …Set-Cookie: …Cookie: …Cookie: …OK: …OK: …

CookieCookieid : Aid : A

CookieCookieid : Bid : B

Page 19: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SESSIONSSESSIONS

Créer ou restaurer une sessionCréer ou restaurer une session boolbool session_start session_start ( ( voidvoid ) )

Manipuler les Manipuler les données de sessiondonnées de session Tableau associatif superglobal Tableau associatif superglobal $_SESSION$_SESSION

Lire ou définir l'identifiant de sessionLire ou définir l'identifiant de session stringstring session_id session_id ( [( [stringstring idid] )] )

Détruire toutes les variables d'une session Détruire toutes les variables d'une session voidvoid session_unsetsession_unset ( ( voidvoid ) )

Détruire une sessionDétruire une session boolbool session_destroysession_destroy ( ( voidvoid ) )

03:21:50

03:21:50

1919

PWB L3 Miage

PWB L3 Miage

Page 20: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SESSIONSSESSIONS

Modifie les paramètres du cookie de sessionModifie les paramètres du cookie de sessionvoidvoid session_set_cookie_paramssession_set_cookie_params ( (

intint lifetimelifetime[, [, stringstring pathpath[, [, stringstring domaindomain[, [, boolbool securesecure[, [, boolbool httponlyhttponly ]]]] ]]]]

))

03:21:50

03:21:50

2020

PWB L3 Miage

PWB L3 Miage

Date d'expiration (timestamp UNIX) :Date d'expiration (timestamp UNIX) :Dans 10 jours : time()+10*24*60*60Dans 10 jours : time()+10*24*60*60Si non précisé, expire à la fermeture du Si non précisé, expire à la fermeture du navigateurnavigateur

Chemin de validité, disponibilité :Chemin de validité, disponibilité :// tout le serveur tout le serveur/prive/prive sous-arborescence "prive" sous-arborescence "prive"Par défaut : répertoire où le cookie est définiPar défaut : répertoire où le cookie est défini

Domaine de validité, disponibilité :Domaine de validité, disponibilité :example.comexample.com le domaine example.comle domaine example.comwww.example.comwww.example.com le sous-domaine www.example.comle sous-domaine www.example.com

Cookie sécurisé ?Cookie sécurisé ?truetrue uniquement si HTTPS uniquement si HTTPSfalsefalse défaut, HTTP et HTTPS défaut, HTTP et HTTPS

Cookie uniquement par HTTP ?Cookie uniquement par HTTP ?truetrue uniquement HTTP uniquement HTTPfalsefalse défaut, HTTP, JavaScript, … défaut, HTTP, JavaScript, …

Page 21: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

PROCÉDURE D'AUTHENTIFICATIONPROCÉDURE D'AUTHENTIFICATION03:21:50

03:21:50

2121

Programmation Web 2010-2011

Programmation Web 2010-2011

RéseauRéseau

ClientClient ServeurServeur

Base deBase dedonnéesdonnées

loginlogin

passpass

??ProblèmeProblème

Le données circulentLe données circulenten clair sur le réseauen clair sur le réseau

ProblèmeProblèmeInjection de code SQLInjection de code SQL requêtes préparéesrequêtes préparées

Page 22: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

PROCÉDURE D'AUTHENTIFICATION PROCÉDURE D'AUTHENTIFICATION SÉCURISÉESÉCURISÉE

03:21:50

03:21:50

2222

Programmation Web 2010-2011

Programmation Web 2010-2011

RéseauRéseau

ClientClient ServeurServeur

Base deBase dedonnéesdonnées

CodageCodage??ProblèmeProblèmeInjection de code SQLInjection de code SQL requêtes préparéesrequêtes préparées

challengechallengechallengechallenge

CodageCodagedonnéedonnée

loginlogin

passpassdonnéedonnée

challengechallenge

SécuritéSécuritéLe données qui circulentLe données qui circulent

sont propressont propresà chaque connexionà chaque connexion

DonnéesDonnéesde sessionde session

Page 23: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SÉRIALISATION D'OBJETSSÉRIALISATION D'OBJETS

Les Les objetsobjets peuvent être peuvent être stockésstockés dansdans les les données de données de sessionsession Linéarisation de l'objet Linéarisation de l'objet réduit à une chaîne réduit à une chaîne Impossible pour le type ressourceImpossible pour le type ressource Impossible pour les références croiséesImpossible pour les références croisées Restauration possible (PHP >= 4)Restauration possible (PHP >= 4)

03:21:50

03:21:50

2323

PWB L3 Miage

PWB L3 Miage

session_start() ;session_start() ;$p = new Point(12, 15) ;$p = new Point(12, 15) ;$_SESSION['monpoint'] = $p ;$_SESSION['monpoint'] = $p ;

session_start() ;session_start() ;

$p = $_SESSION['monpoint'] ;$p = $_SESSION['monpoint'] ;

Page 24: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SÉRIALISATION D'OBJETSSÉRIALISATION D'OBJETS

Méthodes magiques Méthodes magiques __sleep__sleep et et __wakeup__wakeup __sleep__sleep

Appelée Appelée avant la linéarisationavant la linéarisation Doit retourner un tableau contenant le nom des Doit retourner un tableau contenant le nom des

attributs à linéariserattributs à linéariser Choix des attributs à sauvegarderChoix des attributs à sauvegarder Terminer correctement l'objet (déconnexion BD, Terminer correctement l'objet (déconnexion BD,

ressource ouverte, requête en cours, …)ressource ouverte, requête en cours, …) __wakeup__wakeup

Appelée Appelée après la délinéarisationaprès la délinéarisation Restaurer des attributs non sauvegardés (BD, …)Restaurer des attributs non sauvegardés (BD, …)

03:21:50

03:21:50

2424

PWB L3 Miage

PWB L3 Miage

Page 25: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SÉRIALISATION : EXEMPLESÉRIALISATION : EXEMPLEclassclass Point Point {{ privateprivate $$coordcoord ;; privateprivate $$infoinfo ;;

publicpublic functionfunction __construct(__construct($$_x_x, , $$_y_y)) {{ ifif ((!!is_numericis_numeric(($$_x_x)) |||| !!is_numericis_numeric(($$_y_y)))) {{ throwthrow newnew ExceptionException(( ""Paramètres non numériques (Paramètres non numériques ($$_x_x, , $$_y_y))"")) ;;

}} $$thisthis->->coordcoord[[''xx'']] == $$_x_x ;; $$thisthis->->coordcoord[[''yy'']] == $$_y_y ;; $$thisthis->->info info == ' 'NouveauNouveau' ' ;; }}……

03:21:50

03:21:50

2525

PWB L3 Miage

PWB L3 Miage

Page 26: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SÉRIALISATION : EXEMPLESÉRIALISATION : EXEMPLE publicpublic functionfunction __get(__get($$_prop_prop)) {{ ifif ((!!array_key_existsarray_key_exists(($$_prop_prop, , $$thisthis->->coordcoord)))) { { throwthrow newnew ExceptionException(( ""Accès à une propriété inconnue (Accès à une propriété inconnue ($$_prop_prop))"")) ;; }} returnreturn $$thisthis->->coordcoord[[$$_prop_prop]] ;; }} publicpublic functionfunction __set(__set($$_prop_prop, , $$_val_val)) {{ ifif ((!!is_numericis_numeric(($$_val_val)))) throwthrow newnew ExceptionException((""Valeur non numérique Valeur non numérique

(($$_val_val))""));; ifif ((!!array_key_existsarray_key_exists(($$_prop_prop, , $$thisthis->->coordcoord)))) throwthrow newnew ExceptionException(( ""Accès à une propriété inconnue (Accès à une propriété inconnue ($$_prop_prop))"")) ;; returnreturn $$thisthis->->coordcoord[[$$_prop_prop]] == $$_val_val ;;}}

03:21:50

03:21:50

2626

PWB L3 Miage

PWB L3 Miage

Page 27: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SÉRIALISATION : EXEMPLESÉRIALISATION : EXEMPLE

publicpublic functionfunction __sleep()__sleep() {{

returnreturn arrayarray((''coordcoord'')) ;;

}}

publicpublic functionfunction __wakeup()__wakeup() {{

$$thisthis->->info info == ' 'RestauréRestauré' ' ;;

}}

publicpublic functionfunction affiche affiche()() {{

echoecho " "<pre><pre>\n\n" " ;;

var_dumpvar_dump(($$thisthis)) ;;

echoecho " "</pre></pre>\n\n" " ;;

}}

}}

03:21:50

03:21:50

2727

PWB L3 Miage

PWB L3 Miage

Page 28: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SÉRIALISATION : EXEMPLESÉRIALISATION : EXEMPLE

<?php<?php

require_oncerequire_once((''point.inc.phppoint.inc.php'')) ;;

session_startsession_start()() ;;

$$pp == newnew Point Point((11, , 1212)) ;;

$$_SESSION[_SESSION[''pointpoint'']] == $$pp ;;

?>?>

<?php<?php

require_oncerequire_once((''point.inc.phppoint.inc.php'')) ;;

session_startsession_start()() ;;

$$pp == $$_SESSION[_SESSION[''pointpoint'']] ;;

$$pp->->afficheaffiche()() ;;

?>?>

03:21:50

03:21:50

2828

PWB L3 Miage

PWB L3 Miage

Linéarisation :Linéarisation :appel de appel de __sleep()__sleep()

Délinéarisation :Délinéarisation :appel de appel de __wakeup()__wakeup()

object(Point)#1 (2) {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é"} }

publicpublic functionfunction __wakeup()__wakeup() {{ $$thisthis->->info info == ' 'RestauréRestauré' ' ;; }}

Page 29: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

SYSTÈME DE FICHIERSSYSTÈME DE FICHIERS

L'accès au système de fichiers en PHP est réalisé L'accès au système de fichiers en PHP est réalisé par le moteur PHP. Plus précisément, c'est par le moteur PHP. Plus précisément, c'est le le serveur Web qui accède aux fichiersserveur Web qui accède aux fichiers. Ce sont . Ce sont donc les donc les droits d'accès de l'utilisateur "web"droits d'accès de l'utilisateur "web" qui qui sont mis en jeu avec toutes les sont mis en jeu avec toutes les limitationslimitations que que cela comporte !cela comporte !

Les pseudo-types présentés dans les diapositives Les pseudo-types présentés dans les diapositives suivantes sont donnés à titre suivantes sont donnés à titre informatifinformatif..

Toutes les fonctions travaillent à partir du Toutes les fonctions travaillent à partir du répertoire courantrépertoire courant (par défaut, celui du script) (par défaut, celui du script)

Les fonctions présentées retournent souvent Les fonctions présentées retournent souvent falsefalse en cas d'échecen cas d'échec et affichent parfois des et affichent parfois des avertissements dans ce casavertissements dans ce cas

03:21:51

03:21:51

2929

PWB L3 Miage

PWB L3 Miage

Page 30: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS "COMMANDE SHELL"FONCTIONS "COMMANDE SHELL"

chmodchmod : : modifier les droits d'accèsmodifier les droits d'accès chownchown : : modifier le propriétairemodifier le propriétaire chgrpchgrp : : modifier le groupemodifier le groupe mkdirmkdir : : créer un répertoirecréer un répertoire rmdirrmdir : : détruire un répertoiredétruire un répertoire copycopy : : copier un fichiercopier un fichier basenamebasename : : donner le nom d'un fichierdonner le nom d'un fichier dirnamedirname : : donner le chemin d'un fichierdonner le chemin d'un fichier linklink : : créer un lien physiquecréer un lien physique symlinksymlink : : créer un lien symboliquecréer un lien symbolique unlinkunlink : : détruire un liendétruire un lien touchtouch : : changer la date de modificationchanger la date de modification

03:21:51

03:21:51

3030

PWB L3 Miage

PWB L3 Miage

Page 31: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS "COMMANDE SHELL"FONCTIONS "COMMANDE SHELL"

bool bool chmodchmod ( string ( string filenamefilename, int , int modemode ) )remplace le mode de remplace le mode de filenamefilename par le mode par le mode

modemodeex : chmod("foo.txt", 0644) ;ex : chmod("foo.txt", 0644) ;

bool bool chownchown ( ( stringstring filenamefilename, , mixedmixed useruser ) )change le groupe propriétaire courant du change le groupe propriétaire courant du

fichier fichier filenamefilename en en useruserex : chown("foo.txt", "cutrona") ;ex : chown("foo.txt", "cutrona") ;

bool bool chgrpchgrp ( string ( string filenamefilename, mixed , mixed groupgroup ) )remplace le groupe propriétaire courant du remplace le groupe propriétaire courant du

fichier fichier filenamefilename par par groupgroupex : chgrp("foo.txt", "prof") ;ex : chgrp("foo.txt", "prof") ;

03:21:51

03:21:51

3131

PWB L3 Miage

PWB L3 Miage

Page 32: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS "COMMANDE SHELL"FONCTIONS "COMMANDE SHELL"

bool bool mkdirmkdir (string (string pathnamepathname [, int [, int modemode [, bool [, bool recursiverecursive ]]) ]])

crée un répertoire crée un répertoire pathnamepathname avec le mode avec le mode modemode de façonde façon récursiverécursive

ex : mkdir("rep12", 0755) ;ex : mkdir("rep12", 0755) ;

bool bool rmdirrmdir ( string ( string dirnamedirname ) )efface le répertoire dont le chemin est efface le répertoire dont le chemin est dirnamedirname. Le . Le

répertoire doit être viderépertoire doit être videex : rmdir("rep12") ;ex : rmdir("rep12") ;

bool bool copycopy ( string ( string sourcesource, string , string destdest ) )effectue une copie du fichier effectue une copie du fichier sourcesource vers le fichier vers le fichier

destdestex : copy("fic.txt", "copie_fic.txt") ;ex : copy("fic.txt", "copie_fic.txt") ;

03:21:51

03:21:51

3232

PWB L3 Miage

PWB L3 Miage

Page 33: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS "COMMANDE SHELL"FONCTIONS "COMMANDE SHELL"

string string basenamebasename ( string ( string pathpath [, string [, string suffixsuffix] )] )

extrait le nom du fichier (au sens large) dans le extrait le nom du fichier (au sens large) dans le chemin chemin pathpath.. Si Si suffixsuffix est fourni, il sera supprimé est fourni, il sera supprimé dans le nom du fichierdans le nom du fichier

ex : basename("/home/prof/cutrona/public_html") ;ex : basename("/home/prof/cutrona/public_html") ;

public_htmlpublic_html

string string dirnamedirname ( string ( string pathpath ) )

donne le chemin du fichier (au sens large) contenu donne le chemin du fichier (au sens large) contenu dans dans pathpath

ex : dirname("/home/prof/cutrona/public_html") ;ex : dirname("/home/prof/cutrona/public_html") ;

/home/prof/cutrona/home/prof/cutrona

03:21:51

03:21:51

3333

PWB L3 Miage

PWB L3 Miage

Page 34: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS "COMMANDE SHELL"FONCTIONS "COMMANDE SHELL"

bool bool linklink ( string ( string targettarget, string , string linklink ) )crée un lien de nom crée un lien de nom linklink vers le fichier vers le fichier

destination existant destination existant targettargetex : link("foo.txt", "bob") ;ex : link("foo.txt", "bob") ;

bool bool symlinksymlink ( string ( string targettarget, string , string linklink ) )crée un lien symbolique de nom crée un lien symbolique de nom linklink vers le vers le

fichier destination existant fichier destination existant targettargetex : symlink("foo.txt", "bob") ;ex : symlink("foo.txt", "bob") ;

bool bool unlinkunlink ( string ( string filenamefilename ) )efface le fichier efface le fichier filenamefilename

ex : unlink("foo.txt") ;ex : unlink("foo.txt") ;

03:21:51

03:21:51

3434

PWB L3 Miage

PWB L3 Miage

WindowsWindowsWindowsWindows

WindowsWindowsWindowsWindows

Page 35: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS "COMMANDE SHELL"FONCTIONS "COMMANDE SHELL"

bool bool touchtouch ( string ( string filenamefilename [, int [, int timetime [, int [, int atimeatime]] )]] )

tente de forcer la date de modification du fichier tente de forcer la date de modification du fichier désigné par le paramètre désigné par le paramètre filenamefilename à la date de à la date de spécifiée par le paramètre spécifiée par le paramètre timetime. Le troisième . Le troisième paramètre paramètre atimeatime est utilisé comme date de dernier est utilisé comme date de dernier accès. Si le fichier n'existe pas, PHP tente de le créeraccès. Si le fichier n'existe pas, PHP tente de le créertimetime et et atimeatime sont des timestamp UNIX (nombre de sont des timestamp UNIX (nombre de secondes depuis le 1er Janvier 1970 00:00:00 GMT) secondes depuis le 1er Janvier 1970 00:00:00 GMT)

int int mktimemktime ( [int ( [int hourhour [, int [, int minuteminute [, int [, int secondsecond [, int [, int monthmonth [, int [, int dayday [, int [, int yearyear [, int [, int is_dstis_dst]]]]]]] )]]]]]]] )

crée un timestamp UNIX correspondant aux paramètrescrée un timestamp UNIX correspondant aux paramètres

03:21:51

03:21:51

3535

PWB L3 Miage

PWB L3 Miage

Page 36: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS INFORMATIVESFONCTIONS INFORMATIVES

file_existsfile_exists : : fichier existe ?fichier existe ? is_diris_dir : : est un répertoire ?est un répertoire ? is_fileis_file : : est un fichier régulier ?est un fichier régulier ? is_linkis_link : : est un lien symbolique ?est un lien symbolique ? filetypefiletype : : type de fichiertype de fichier is_readableis_readable : : est lisible ?est lisible ? is_executableis_executable : : est exécutable ?est exécutable ? is_writ[e]ableis_writ[e]able : : peut être modifié ?peut être modifié ?

03:21:51

03:21:51

3636

PWB L3 Miage

PWB L3 Miage

Page 37: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS INFORMATIVESFONCTIONS INFORMATIVES

disk_free_spacedisk_free_space : : espace disponibleespace disponible disk_total_spacedisk_total_space : : espace occupéespace occupé filesizefilesize : : taille du fichiertaille du fichier fileatimefileatime : : date d'accèsdate d'accès filectimefilectime : : date de changement date de changement filemtimefilemtime : : date de modificationdate de modification fileownerfileowner : : propriétairepropriétaire filegroupfilegroup : : groupegroupe filepermsfileperms : : droits d'accèsdroits d'accès

03:21:51

03:21:51

3737

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 38: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS INFORMATIVESFONCTIONS INFORMATIVES

bool bool file_existsfile_exists ( string ( string filenamefilename ) )

retourne retourne truetrue si le fichier si le fichier filenamefilename existe, et existe, et falsefalse sinon sinon

ex : file_exists("foo.txt") ;ex : file_exists("foo.txt") ;

bool bool is_diris_dir ( string ( string filenamefilename ) )

retourne retourne truetrue si si filenamefilename existe et est un dossier existe et est un dossier

ex : is_dir("progweb1A") ;ex : is_dir("progweb1A") ;

bool bool is_fileis_file ( string ( string filenamefilename ) )

retourne retourne truetrue si si filenamefilename existe et est un fichier existe et est un fichier régulierrégulier

ex : is_file("index.php") ;ex : is_file("index.php") ;

03:21:52

03:21:52

3838

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 39: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS INFORMATIVESFONCTIONS INFORMATIVES

bool bool is_linkis_link ( string ( string filenamefilename ) )retourne retourne truetrue si si filenamefilename existe et est un lien existe et est un lien

symboliquesymboliqueex : is_link("progweb1A/Cours") ;ex : is_link("progweb1A/Cours") ;

string string filetypefiletype ( string ( string filenamefilename ) )renvoie le type du fichier renvoie le type du fichier filenamefilename. Réponses . Réponses

possibles :possibles : fifo :fifo : file UNIXfile UNIX char :char : fichier spécial de type caractèrefichier spécial de type caractère dir :dir : répertoirerépertoire block :block : fichier spécial de type blocfichier spécial de type bloc link :link : lien symboliquelien symbolique file :file : fichier régulierfichier régulier unknown :unknown : inconnuinconnu

03:21:52

03:21:52

3939

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 40: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS INFORMATIVESFONCTIONS INFORMATIVES

bool bool is_readableis_readable ( string ( string filenamefilename ) )retourne retourne truetrue si le fichier ou le dossier si le fichier ou le dossier filenamefilename

existe et est accessible en lecture. existe et est accessible en lecture. ex : is_readable("foo.txt") ;ex : is_readable("foo.txt") ;

bool bool is_writ[e]ableis_writ[e]able ( string ( string filenamefilename ) )retourne retourne truetrue si si filenamefilename existe et est existe et est

accessible en écriture. accessible en écriture. ex : is_writable("foo.txt") ;ex : is_writable("foo.txt") ;

bool bool is_executableis_executable ( string ( string filenamefilename ) )retourne retourne truetrue si si filenamefilename existe et est existe et est

exécutable.exécutable.ex : is_executable("index.php") ;ex : is_executable("index.php") ;

03:21:52

03:21:52

4040

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 41: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS INFORMATIVESFONCTIONS INFORMATIVES

float float disk_free_spacedisk_free_space ( string ( string directorydirectory ) )retourne le nombre d'octets disponibles sur le retourne le nombre d'octets disponibles sur le

disque contenant le dossier disque contenant le dossier directorydirectoryex : ex :

disk_free_space("/home/prof/cutrona/public_html"disk_free_space("/home/prof/cutrona/public_html") ;) ;

float float disk_total_spacedisk_total_space ( string ( string directorydirectory ) )lit récursivement toutes les tailles du dossier lit récursivement toutes les tailles du dossier

directorydirectory et retourne la somme et retourne la sommeex : ex :

disk_total_space("/home/prof/cutrona/public_html"disk_total_space("/home/prof/cutrona/public_html") ;) ;

int int filesizefilesize ( string ( string filenamefilename ) )renvoie la taille du fichier renvoie la taille du fichier filenamefilenameex : filesize("index.php") ;ex : filesize("index.php") ;

03:21:52

03:21:52

4141

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 42: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS INFORMATIVESFONCTIONS INFORMATIVES

int int fileatimefileatime ( string ( string filenamefilename ) )

renvoie la date de dernier renvoie la date de dernier accès auaccès au contenucontenu de de filenamefilename

ex : fileatime("index.php") ;ex : fileatime("index.php") ;

int int filectimefilectime ( string ( string filenamefilename ) )

renvoie la date à laquelle les renvoie la date à laquelle les propriétés du fichierpropriétés du fichier filenamefilename ont été ont été changéeschangées pour la dernière fois pour la dernière fois

ex : filectime("index.php") ;ex : filectime("index.php") ;

int int filemtimefilemtime ( string ( string filenamefilename ) )

renvoie la date de dernière renvoie la date de dernière modification dumodification du contenucontenu du fichier du fichier filenamefilename

ex : filemtime("index.php") ;ex : filemtime("index.php") ;

03:21:52

03:21:52

4242

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 43: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS INFORMATIVESFONCTIONS INFORMATIVES

int int fileownerfileowner ( string ( string filenamefilename ) )renvoie renvoie l'l'uiduid du propriétaire du fichier du propriétaire du fichier filenamefilename

arrayarray posix_getpwuidposix_getpwuid ( ( intint uiduid ) ) ex : fileowner("index.php") ;ex : fileowner("index.php") ;

int int filegroupfilegroup ( string ( string filenamefilename ) )renvoie le renvoie le gidgid groupe qui possède le fichier groupe qui possède le fichier filenamefilename

array array posix_getgrgidposix_getgrgid ( int ( int gidgid ) ) ex : filegroup("index.php") ;ex : filegroup("index.php") ;

int int filepermsfileperms ( string ( string filenamefilename ) )renvoie les permissions affectées au fichier renvoie les permissions affectées au fichier filenamefilenameex : fileperms("index.php") ;ex : fileperms("index.php") ;

03:21:53

03:21:53

4343

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 44: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE LECTURE/ÉCRITUREFONCTIONS DE LECTURE/ÉCRITURE

readfilereadfile : : contenu contenu sortie std sortie std file_get_contentsfile_get_contents : : contenu contenu chaîne chaîne filefile : : contenu contenu tableau tableau fopenfopen : : ouvrir un fichierouvrir un fichier freadfread : : lire dans un fichier ouvertlire dans un fichier ouvert fwritefwrite : : écrire dans un fichier ouvertécrire dans un fichier ouvert fseekfseek : : se déplacer dans un fichierse déplacer dans un fichier ftellftell : : position dans un fichierposition dans un fichier fgetcfgetc : : lire un caractèrelire un caractère fgetsfgets : : lire une lignelire une ligne fclosefclose : : fermeture d'un fichierfermeture d'un fichier

03:21:53

03:21:53

4444

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 45: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE LECTURE/ÉCRITUREFONCTIONS DE LECTURE/ÉCRITURE03:21:53

03:21:53

4545

Programmation Web 2011-2012

Programmation Web 2011-2012

FichierFichier

CurseurCurseur

FichierFichier

CurseurCurseur

LectureLecture

Écriture avecÉcriture avecremplacementremplacement

FichierFichier

CurseurCurseur

Écriture avecÉcriture avecdestructiondestruction

FichierFichier

CurseurCurseur

Écriture avecÉcriture avecajout seulajout seul

Page 46: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE LECTUREFONCTIONS DE LECTURE

int int readfilereadfile ( string ( string filenamefilename ) )lit le fichier lit le fichier filenamefilename et l'envoie sur la sortie et l'envoie sur la sortie

standard. standard. retourne le nombre d'octets lus depuis le fichierretourne le nombre d'octets lus depuis le fichierex : readfile("index.html") ;ex : readfile("index.html") ;

string string file_get_contentsfile_get_contents ( string ( string filenamefilename ))lit le fichier lit le fichier filenamefilename et place son contenu dans une et place son contenu dans une

chaînechaîneex : $s = file_get_contents("liste.txt") ;ex : $s = file_get_contents("liste.txt") ;

array array filefile ( string ( string filenamefilename ) )lit le fichier lit le fichier filenamefilename et place son contenu dans un et place son contenu dans un

tableau dont chaque élément contient une ligne tableau dont chaque élément contient une ligne du fichierdu fichier

ex : $t = file("liste.txt") ;ex : $t = file("liste.txt") ;

03:21:53

03:21:53

4646

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 47: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE LECTURE/ÉCRITUREFONCTIONS DE LECTURE/ÉCRITURE

resource resource fopenfopen ( string ( string filenamefilename, string , string modemode ) )crée une ressource nommée, spécifiée par le crée une ressource nommée, spécifiée par le

paramètre paramètre filenamefilename, sous la forme d'un flux , sous la forme d'un flux ouvert selon le ouvert selon le modemode

ex : $fp = fopen("index.html", 'r+') ;ex : $fp = fopen("index.html", 'r+') ;

03:21:53

03:21:53

4747

Programmation Web 2011-2012

Programmation Web 2011-2012

ModeMode DescriptionDescription'r''r' Lecture, curseur au débutLecture, curseur au début'r+''r+' Lecture/écriture, curseur au débutLecture/écriture, curseur au début'w''w' Écriture, curseur au début, RAZÉcriture, curseur au début, RAZ'w+''w+' Lecture/écriture, curseur au début, RAZLecture/écriture, curseur au début, RAZ'a''a' Écriture, curseur à la fin, fseek HSÉcriture, curseur à la fin, fseek HS'a+''a+' Lecture/écriture, curseur à la fin, fseek HSLecture/écriture, curseur à la fin, fseek HS'x''x' Création, écriture, échec si existeCréation, écriture, échec si existe'x+''x+' Création, lecture/écriture, échec si existeCréation, lecture/écriture, échec si existe

Page 48: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE LECTURE/ÉCRITUREFONCTIONS DE LECTURE/ÉCRITURE

string string freadfread ( resource ( resource handlehandle, int , int lengthlength ) )lit jusqu'à lit jusqu'à lengthlength octets dans le fichier octets dans le fichier

référencé par référencé par handlehandle

int int fwritefwrite ( resource ( resource handlehandle, string , string stringstring [, int [, int lengthlength] )] )

écrit le contenu de la chaîne écrit le contenu de la chaîne stringstring dans le dans le fichier référencé par fichier référencé par handlehandle à concurrence de à concurrence de lengthlength octets, ou de la taille de la chaîne octets, ou de la taille de la chaîne stringstring

boolbool fclosefclose ( ( resourceresource handlehandle ) )ferme le fichierferme le fichier référencé par référencé par handlehandle

03:21:53

03:21:53

4848

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 49: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE LECTURE/ÉCRITUREFONCTIONS DE LECTURE/ÉCRITURE

int int fseekfseek ( resource ( resource handlehandle, int , int offsetoffset [, int [, int whencewhence] )] )modifie le curseur de position dans le fichier modifie le curseur de position dans le fichier

référencé par référencé par handlehandle. La nouvelle position mesurée . La nouvelle position mesurée en octets à partir du début du fichier, est obtenue en octets à partir du début du fichier, est obtenue en additionnant la distance en additionnant la distance offsetoffset à la position à la position whencewhence : : SEEK_SETSEEK_SET - Position finale = - Position finale = offsetoffset octets. octets. SEEK_CURSEEK_CUR - Position finale = position courante + - Position finale = position courante + offsetoffset

octets.octets. SEEK_ENDSEEK_END - Position finale = position fin du fichier + - Position finale = position fin du fichier +

offsetoffset..

int int ftellftell ( resource ( resource handlehandle ) )retourne la position courante, en octets, du curseur retourne la position courante, en octets, du curseur

dans le fichier référencé par dans le fichier référencé par handlehandle

03:21:53

03:21:53

4949

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 50: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE LECTURE/ÉCRITUREFONCTIONS DE LECTURE/ÉCRITURE

string string fgetcfgetc ( resource ( resource handlehandle ) )

retourne une chaîne contenant un seul retourne une chaîne contenant un seul caractère, lu depuis le fichier référencé par caractère, lu depuis le fichier référencé par handlehandle

string string fgetsfgets ( resource ( resource handlehandle [, int [, int lengthlength] )] )

retourne une ligne du fichier référencé par retourne une ligne du fichier référencé par handlehandle jusqu'à la longueur maximale jusqu'à la longueur maximale lengthlength - - 1 octets1 octets

03:21:53

03:21:53

5050

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 51: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

EXEMPLE DE BOUCLE DE LECTUREEXEMPLE DE BOUCLE DE LECTURE

// Tentative d'ouverture du fichier// Tentative d'ouverture du fichier

ifif  (($$hh  == @ @fopenfopen((""dummy.txtdummy.txt", "", "rr""))))  {{

// Lecture du fichier ligne à ligne// Lecture du fichier ligne à ligne

    whilewhile  (((($$ligneligne  ==  fgetsfgets(($$hh))))  !==!==  falsefalse))  {{

     // Utilisation de $ligne// Utilisation de $ligne

    }}

    // Fermeture// Fermeture

    fclosefclose(($$hh)) ; ;

}}

03:21:53

03:21:53

5151

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 52: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE RECHERCHEFONCTIONS DE RECHERCHE

fnmatchfnmatch : : contrôle de motifcontrôle de motif globglob : : recherche de cheminsrecherche de chemins

03:21:53

03:21:53

5252

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 53: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

CONTRÔLE DE MOTIFCONTRÔLE DE MOTIF

bool bool fnmatchfnmatch ( string ( string momo , string , string ch ch [, int [, int flagflag] )] )

vérifie si la chaîne vérifie si la chaîne chch correspond au motif correspond au motif momo..

fnmatchfnmatch utilise une forme simple utilise une forme simple d'expressions régulières équivalentes à celles d'expressions régulières équivalentes à celles utilisés en Shell UNIX.utilisés en Shell UNIX.

ex : fnmatch("*gr[ae]y", $color)ex : fnmatch("*gr[ae]y", $color)

03:21:53

03:21:53

5353

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 54: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

RECHERCHE DE CHEMINSRECHERCHE DE CHEMINS

array array globglob ( string ( string momo [, int [, int flagflag] )] )

recherche tous les chemins correspondant au recherche tous les chemins correspondant au motif motif momo..

retourne un tableau contenant les noms des retourne un tableau contenant les noms des chemins trouvéschemins trouvés

valeurs possibles de valeurs possibles de flagflag : : GLOB_NOSORTGLOB_NOSORT – Pas de tri– Pas de tri GLOB_NOESCAPEGLOB_NOESCAPE –– Pas de protection des méta- Pas de protection des méta-

caractère avec un anti-slashcaractère avec un anti-slash GLOB_BRACEGLOB_BRACE –– Remplace {a,b,c} par 'a', 'b' ou Remplace {a,b,c} par 'a', 'b' ou

'c''c' GLOB_ONLYDIRGLOB_ONLYDIR –– Ne retourne que les dossiers Ne retourne que les dossiers

03:21:53

03:21:53

5454

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 55: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

PHP & MYSQL

5555/154/154

Page 56: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

PRÉSENTATION

MySQL est une base de données implémentant MySQL est une base de données implémentant le langage de requête SQL un langage le langage de requête SQL un langage relationnel très connu. Cette partie suppose relationnel très connu. Cette partie suppose connue les principes des bases de données connue les principes des bases de données relationnelles.relationnelles.

phpMyAdmin qui permet l’administration aisée phpMyAdmin qui permet l’administration aisée des bases de données MySQL avec php. des bases de données MySQL avec php.

Avec MySQL vous pouvez créer plusieurs bases Avec MySQL vous pouvez créer plusieurs bases de données sur un serveur. Une base est de données sur un serveur. Une base est composée de tables contenant des composée de tables contenant des enregistrements.enregistrements.

5656//154154

Page 57: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS DE CONNEXION

mysql_connect($server,$user,$password)mysql_connect($server,$user,$password) : permet de se connecter au serveur : permet de se connecter au serveur $server$server en tant qu’utilisateur en tant qu’utilisateur $user$user avec le mot de avec le mot de passe passe $password$password, retourne l’identifiant de , retourne l’identifiant de connexion si succès, FALSE sinonconnexion si succès, FALSE sinon

mysql_select_db($base[,$id])mysql_select_db($base[,$id]) : permet de : permet de choisir la base choisir la base $base$base, retourne TRUE en cas , retourne TRUE en cas de succès, sinon FALSEde succès, sinon FALSE

mysql_close([$id])mysql_close([$id]) : permet de fermer la : permet de fermer la connexionconnexion

5757//154154

Page 58: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

EXEMPLE

Exemple 1 :Exemple 1 :if( $id = if( $id =

mysql_connectmysql_connect(‘’localhost’’,’’foobar’’,’’0478’(‘’localhost’’,’’foobar’’,’’0478’’) ) {’) ) {if( $id_db = if( $id_db = mysql_select_dbmysql_select_db(‘’gigabase’’) ) {(‘’gigabase’’) ) {

echo ‘’Succès de connexion.’’;echo ‘’Succès de connexion.’’;/* code du script … *//* code du script … */

} else {} else {die(‘’Echec de connexion à la base.’’);die(‘’Echec de connexion à la base.’’);

}}mysql_closemysql_close($id);($id);

} else {} else {die(‘’Echec de connexion au serveur de base die(‘’Echec de connexion au serveur de base de données.’’);de données.’’);

}}

5858//154154

Page 59: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

UNE AUTRE FACON

Exemple 2 :

@mysql_connect(‘’localhost’’,’’foobar’’,’’0478’’) or die(‘’Echec de connexion au serveur.’’);

@mysql_select_db(‘’gigabase’’) or die(‘’Echec de sélection de la base.’’);

Cet exemple est équivalent au précédent mais plus court à écrire. Le symbole @ (arobase) permet d’éviter le renvoie de valeur par la fonction qu’il précède.

On pourra avantageusement intégrer ce code dans un fichier que l’on pourra joindre par include(). C’est aussi un moyen de sécuriser le mot de passe de connexion.

5959//154154

Page 60: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

INTERROGATION

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 d’une table), SELECT (sélection), INSERT (insertion), UPDATE (mise à jour des données), DELETE (suppression), ALTER (modification d’une 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 n’autorisent pas les SELECT imbriqués.

6060//154154

Page 61: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

EXTRACTION DES DONNÉES

Sous MySQL, l’affichage des résultats d’une requête se fait ligne par ligne. Une boucle permettra de recueillir chacune des lignes à partir de l’identifiant de résultat.

SQL > SELECT * FROM users; ID NAME ADDRESS---------------------------- 1 Boris Moscou 1ère ligne 2 Bill Washington 2ème ligne 3 William London 3è ligne

6161//154154

Page 62: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

EXTRACTION DES DONNÉES mysql_fetch_row($result) : retourne une ligne de

résultat sous la forme d’un tableau. Les éléments du tableau étant les valeurs des attributs de la ligne. Retourne FALSE s’il n’y 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 <br />’’;

}} else {

echo ‘’Erreur de requête de base de données.’’;}

6262//154154

Page 63: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

EXTRACTION 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 s’il n’y 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 <br />’’;

}} else {

echo ‘’Erreur de requête de base de données.’’;}Ici, on accède aux valeurs de la ligne par l’attribut dans le tableau

associatif.

6363//154154

Page 64: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

EXTRACTION DES DONNÉES mysql_fetch_object($result) : retourne un objet. Les

attributs de l’objet correspondent à ceux de la ligne de résultat. Et les valeurs des attributs de l’objet correspondent à ceux de la ligne de résultat. Retourne FALSE s’il n’y 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 <br />’’;

}} else {

echo ‘’Erreur de requête de base de données.’’;}Ici, on accède aux valeurs par leur attribut dans l’objet.

6464//154154

Page 65: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

FONCTIONS 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 l’identifiant d’un attribut clé primaire AUTO_INCREMENT de la dernière insertion.

mysql_num_fields($result) : retourne le nombre d’attributs 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.6565//154154

Page 66: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

PHPMYADMIN

03:21:55

03:21:55

Programmation Web 2011-2012

Programmation Web 2011-2012

6666

Page 67: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

PHPMYADMIN

Interface Web pour MySQL écrite en PHP Projet open source :

http://www.phpmyadmin.net 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:21:55

03:21:55

6767

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 68: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

CONNEXION

03:21:55

03:21:55

6868

Programmation Web 2011-2012

Programmation Web 2011-2012

Login : votre login habituelLogin : votre login habituelMot de passe : votre login habituelMot de passe : votre login habituelBase de données : votre login habituelBase de données : votre login habituel

Page 69: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

ACCUEIL VERSION 2

03:21:55

03:21:55

6969

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 70: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

ACCUEIL VERSION 3.4

03:21:55

03:21:55

7070

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 71: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

STRUCTURE D’UNE BASE

03:21:55

03:21:55

7171

Programmation Web 2011-2012

Programmation Web 2011-2012

AfficherAfficher

StructureStructure

RechercherRechercher InsérerInsérer

ViderVider

SupprimerSupprimer

Page 72: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

REQUÊTE DANS LA BASE

03:21:55

03:21:55

7272

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 73: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

RECHERCHE DANS LA BASE

03:21:55

03:21:55

7373

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 74: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

REQUÊTE ASSISTÉE DANS LA BASE

03:21:56

03:21:56

7474

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 75: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

AFFICHER LE CONTENU D'UNE TABLE

03:21:56

03:21:56

7575

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 76: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

STRUCTURE D'UNE TABLE

03:21:56

03:21:56

7676

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 77: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

REQUÊTE SUR UNE TABLE

03:21:56

03:21:56

7777

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 78: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

RECHERCHE DANS UNE TABLE

03:21:56

03:21:56

7878

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 79: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

INSERTION DE DONNÉES DANS UNE TABLE

03:21:56

03:21:56

7979

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 80: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

EXPORTATION DE DONNÉES / BASE

03:21:57

03:21:57

8080

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 81: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

IMPORTATION DE DONNÉES / BASE

03:21:57

03:21:57

8181

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 82: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

OPÉRATIONS SUR UNE TABLE

03:21:57

03:21:57

8282

Programmation Web 2011-2012

Programmation Web 2011-2012

Page 83: PHP S ÉANCE 2 PHP avancé 03:32:44 PWB L3 Mioage 1

CONCEPTEUR

03:21:58

03:21:58

8383

Programmation Web 2011-2012

Programmation Web 2011-2012