Accès au système de fichiers

Download Report

Transcript Accès au système de fichiers

PHP
Accès au système de fichiers
Jérôme CUTRONA
[email protected]
22:18:27
Programmation Web 2012-2013
1
Préambule
 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.
 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
22:18:27
Programmation Web 2012-2013
2
Fonctions "commande shell"
 chmod :
 chown :
 chgrp :
 mkdir :
 rmdir :
 copy :
 basename :
 dirname :
 link :
 symlink :
 unlink :
22:18:27
touch :
modifier les droits d'accès
modifier le propriétaire
modifier le groupe
créer un répertoire
détruire un répertoire
copier un fichier
donner le nom d'un fichier
donner le chemin d'un fichier
créer un lien physique
créer un lien symbolique
détruire un lien
changer
la date de modification
Programmation Web 2012-2013
3
Fonctions "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 l’utilisateur 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") ;
22:18:27
Programmation Web 2012-2013
4
Fonctions "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") ;
22:18:27
Programmation Web 2012-2013
5
Fonctions "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
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
22:18:27
Programmation Web 2012-2013
6
Fonctions "commande shell"
bool link ( string target, string link ) Windows
crée un lien de nom link vers le fichier destination existant
target
ex : link("foo.txt", "bob") ;
bool symlink ( string target, string link ) Windows
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") ;
22:18:27
Programmation Web 2012-2013
7
Fonctions "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 1970 00:00:00 GMT)
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
22:18:27
Programmation Web 2012-2013
8
Fonctions informatives








file_exists :
is_dir :
is_file :
is_link :
filetype :
is_readable :
is_executable :
is_writ[e]able :
22:18:27
fichier existe ?
est un répertoire ?
est un fichier régulier ?
est un lien symbolique ?
type de fichier
est lisible ?
est exécutable ?
peut être modifié ?
Programmation Web 2012-2013
9
Fonctions informatives









disk_free_space :
espace disponible
disk_total_space :
espace occupé
filesize :
taille du fichier
fileatime :
date d'accès
filectime :
date de changement
filemtime :
date de modification
fileowner :
propriétaire
filegroup :
groupe
fileperms :
droits d'accès
22:18:27
Programmation Web 2012-2013
10
Fonctions 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") ;
22:18:27
Programmation Web 2012-2013
11
Fonctions 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 :







22:18:27
fifo :
char :
dir :
block :
link :
file :
unknown :
file UNIX
fichier spécial de type caractère
répertoire
fichier spécial de type bloc
lien symbolique
fichier régulier
inconnu
Programmation Web 2012-2013
12
Fonctions 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") ;
22:18:27
Programmation Web 2012-2013
13
Fonctions 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") ;
22:18:27
Programmation Web 2012-2013
14
Fonctions 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") ;
int filemtime ( string filename )
renvoie la date de dernière modification du contenu du
fichier filename
ex : filemtime("index.php") ;
22:18:27
Programmation Web 2012-2013
15
Fonctions informatives
int fileowner ( string filename )
renvoie l'uid du propriétaire du fichier filename
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 )
ex : filegroup("index.php") ;
int fileperms ( string filename )
renvoie les permissions affectées au fichier filename
ex : fileperms("index.php") ;
22:18:27
Programmation Web 2012-2013
16
Fonctions de lecture/écriture











readfile :
contenu  sortie std
file_get_contents : contenu  chaîne
file :
contenu  tableau
fopen :
ouvrir un fichier
fread :
lire dans un fichier ouvert
fwrite :
écrire dans un fichier ouvert
fseek :
se déplacer dans un fichier
ftell :
position dans un fichier
fgetc :
lire un caractère
fgets :
lire une ligne
fclose :
fermeture d'un fichier
22:18:27
Programmation Web 2012-2013
17
Fonctions de lecture/écriture
Fichier
Lecture
Curseur
Écriture avec
remplacement
Fichier
Curseur
Écriture avec
destruction
Fichier
Curseur
Écriture avec
ajout seul
Fichier
Curseur
22:18:27
Programmation Web 2012-2013
18
Fonctions 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") ;
22:18:27
Programmation Web 2012-2013
19
Fonctions 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
Mode
'r'
'r+'
'w'
'w+'
'a'
'a+'
'x'
'x+'
Description
Lecture, curseur au début
Lecture/écriture, curseur au début
Écriture, curseur au début, RAZ
Lecture/écriture, curseur au début, RAZ
Écriture, curseur à la fin, fseek HS
Lecture/écriture, curseur à la fin, fseek HS
Création, écriture, échec si existe
Création, lecture/écriture, échec si existe
ex : $fp = fopen("index.html", 'r+') ;
22:18:27
Programmation Web 2012-2013
20
Fonctions 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
22:18:27
Programmation Web 2012-2013
21
Fonctions 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_CUR - Position finale = position courante + offset octets.
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
22:18:27
Programmation Web 2012-2013
22
Fonctions 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
22:18:27
Programmation Web 2012-2013
23
Exemple de boucle de lecture
// Tentative d'ouverture du fichier
if ($h = @fopen("dummy.txt", "r")) {
// Lecture du fichier ligne à ligne
while (($ligne = fgets($h)) !== false) {
// Utilisation de $ligne
}
// Fermeture
fclose($h) ;
}
22:18:27
Programmation Web 2012-2013
24
Fonctions de recherche
 fnmatch :
 glob :
22:18:27
contrôle de motif
recherche de chemins
Programmation Web 2012-2013
25
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)
22:18:27
Programmation Web 2012-2013
26
Recherche 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 :




22:18:27
GLOB_NOSORT – Pas de tri
GLOB_NOESCAPE – Pas de protection des métacaractère avec un anti-slash
GLOB_BRACE – Remplace {a,b,c} par 'a', 'b' ou 'c'
GLOB_ONLYDIR – Ne retourne que les dossiers
Programmation Web 2012-2013
27