Effet Accordéon

Section 1

Mauris mauris ante, blandit et, ultrices a, suscipit eget. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio.

Section 2

Sed non urna. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor aliquet laoreet, mauris turpis velit, faucibus interdum tellus libero ac justo.

Section 3

Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.Phasellus pellentesque purus in massa.

  • List item one
  • List item two
  • List item three

dimanche 14 avril 2013

Le système de fichiers


Le système de fichiers
Travail sur les fichiers
Ouverture
La fonction fopen() permet d'ouvrir ou de créer un fichier selon divers modes. Elle prend en premier
pramètre le nom du fichier avec son chemin. Ce nom de fichier peut être une URL (il faut pour cela
que la directive  allow_url_fopen  soit  activée dans  le php.ini).  Le second paramètre est   le mode
d'ouverture :
r :lecture seule, en début de fichier
r+: lecture/écriture, en début de fichier
w : écriture seule , taille du fichier à 0 (ancien contenu effacé), créé s'il n'existe pas
w+ : lecture/écriture, taille du fichier à 0, créé s'il n'existe pas
a : écriture seule, en fin de fichier, créé s'il n'existe pas
a+ : lecture/écriture, en fin de fichier, créé s'il n'existe pas.
On peut sous Windows rajouter la lettre 'b' pour le type binaire, inutile sous Unix.
Enfin, fopen() admet un troisième paramètre : 1. Dans ce cas le fichier à ouvrir sera recherché dans
le include_path (voir php.ini).
La valeur retournée est une ressource de fichier (identifiant de fichier) ou la valeur FALSE en cas
d'échec.
$file=fopen('server.log','a+',1);
Lecture
fgets()
La   fonction  fgets()  permet   de   lire   une   ligne   d'un   fichier   en  mode   texte.  La   fonction   s'arrête
lorsqu'elle arrive à la fin du fichier ou à un retour chariot. On peut préciser en second paramètre une
longueur de texte en octet qui est par défaut 1024 et ce paramètre est obligatoire avant les versions
4.2.   Le   premier   paramètre   est   l'identifiant   du   fichier.   FALSE   sera   retourné   en   cas   d'erreur.
ATTENTION : fgets() ne retourne pas FALSE à la fin du fichier.
$ligne=fgets($file);
fread();
La fonction fread() permet de lire un fichier en mode binaire. Le second paramètre est la longueur
souhaitée. Sous Windows il faut penser à placer 'b' dans fopen(). La lecture s'arrête lorsque les n
octets (longueur) ont été lus, la fin du fichier a été atteinte ou qu'une erreur est survenue.
S. ROHAUT Cours Programmation PHP Page 51/93$file=fopen('monimage.gif','rb');
$img=fread($file, $filesize('nomimage.gif'));
fclose($file);
fscanf()
La fonction fscanf() lit des lignes d'un fichier en fonction d'un formatage particulier.
$file=fopen('users.txt','r');
while($ligne=fscanf($file,"%s\t%s\t%s\n")) {
 echo $ligne;
}
fgetc()
La fonction fgetc() lit un seul caractère dans le fichier. Contrairement à fgets(), elle retourne FALSE
à la fin du fichier. Le premier paramètre est l'identifiant du fichier.
fgetss()
La fonction fgetss()  fonction est identique à fgets() mais la ligne retournée est débarrassée de ses
éventuelles balises PHP ou HTML.  On peut  préciser en  troisième paramètre une  liste de balises
autorisées.
fgetcsv()
La fonction fgetcsv() est une fonction très puissante car elle permet de lire un fichier de type CSV,
c'est  à dire dont   les champs sont  délimités,  pour   récupérer   les champs dans un  tableau.  Lesond
paramètre est la longueur maximale d'une ligne du fichier, le troisième paramètre le séparateur, qui
est la virgule par défaut.
Voici  un exemple permettant  de  lire un fichier  CSV et  d'en afficher  le résultat  sous forme d'un
tableau HTML :
$filename = "book1.csv";
$id = fopen($filename, "r");
while ($data = fgetcsv($id, filesize($filename))) $table[] = $data;
fclose($id);
echo "<table>\n";
foreach($table as $row) {
 echo "<tr>";
 foreach($row as $data) echo "<td>$data</td>";
 echo "</tr>\n";
}
echo "</table>\n";
11.1.2.7 Renvoyer un fichier par la sortie standard
La fonction  readfile()  prend comme paramètre un nom de fichier et   renvoie son contenu par  la
sortie  standard.  La  fonction  readgzfile()  effectue  la même chose mais   le  fichier  est  au  format
compressé gzip (zlib).
S. ROHAUT Cours Programmation PHP Page 52/9311.1.3 Ecriture
Les deux fonctions  fwrite()  et  fputs()  sont  identiques 100% car  fputs()  est un alias de  fwrite().
Elles écrivent  une chaîne dans un fichier.  On peut   limiter  la  longueur de  la chaîne en  troisième
paramètre mais par défaut toute la chaîne est écrite. La valeur retournée est le nombre d'octets écrits,
ou FALSE en cas d'erreur.
$file=fopen('monfic.txt','a);
$ret=fwrite($file,'Une ligne dans mon fichier');
fclose($file);
En cas de travail sur un fichier binaire, il ne faut pas oublier sous Windows de rajouter l'option 'b'.
Déplacement
fseek()
La  fonction  fseek()  permet  de  se déplacer  dans  un  fichier.  Le  second paramètre  (offset)  est   le
nombre d'octets de déplacement. Il peut être négatif. Par défaut le déplacement est calculé à partir
du début du fichier mais un troisième paramètre peut modifier cet état. La valeur retournée est 0
(zéro) en cas de réussite, -1 sinon. Un positionnement après la fin du fichier n'est pas une erreur.
SEEK_SET : Calcul à partir du début du fichier. Position finale : Début+offset
SEEK_CUR : Calcul à partir de l'emplacement actuel. Position finale : Actuelle+offset
SEEK_END : Calcul à partir de la fin du fichier. Position finale : Fin+Offset.
$ret=fseek($file,0, SEEK_END); // Fin du fichier
ftell()
La fonction fseek() renvoie la position actuelle du pointeur dans le fichier.
$pos=ftell($file);
rewind()
La  fonction  rewind()  permet  de  retourner   au début  du  fichier.  Elle  retourne TRUE en  cas  de
réussite, FALSE sinon.
La fonction feof() indique si on est à la fin du fichier ou non. Elle retourne TRUE si la fin de fichier
a été atteinte, FALSE sinon.
$fd = fopen ("/tmp/inputfile.txt", "r");
while (!feof ($fd)) {
 $buffer = fgets($fd, 4096);
 echo $buffer;
}
fclose ($fd);
S. ROHAUT Cours Programmation PHP Page 53/9311.1.6 Fermeture
On ferme un fichier avec la fonction fclose().Elle retourne TRUE en cas de réussite, FALSE sinon.
11.2 Travail sur les répertoires
11.2.1 Répertoire actuel
La  fonction  getcwd()  retourne  le  nom du dossier  de   travail  courant,  c'est  à dire  là où on est.
Attention  sous Windows   :  cette  fonction ne  fait  pas  de distinctions  entre  les  majuscules et   les
minuscules.
$chemin=getcwd();
echo $ chemin ;  :: /srv/www/site
11.2.2 Se déplacer
On se déplace avec  la  fonction  chdir().  L'argument  peut  être absolu ou  relatif.  En cas d'erreur,
FALSE est retourné.
if(chdir('./rep'))
 getcwd();
else
 die('Impossible de se déplacer');
Ouvrir, lister, fermer
On ouvre un répertoire en lecture avec la fonction opendir() qui prend comme unique paramètre un
nom ou chemin de  répertoire.  En cas d'échec,   la  fonction  retourne FALSE sinon un  identifiant
(handler) de répertoire.
On lit une entrée avec la fonction readdir() qui prend comme paramètre l'identifiant de répertoire.
Quand il n'y a plus rien à lire, la fonction retourne FALSE sinon elle retourne le nom de l'entrée
actuellement lue. ATTENTION, les entrées « . » et « .. » sont lues comme les autres.
On ferme un répertoire en cours de lecture avec la fonction closedir() qui prend comme paramètre
l'identifiant de répertoire.
$handle=opendir('.');
while ($file = readdir($handle)) {
   if ($file != "." && $file != "..") {
       echo "$file\n";
   }
}
closedir($handle);
On peut retourner au début du répertoire avec la fonction rewinddir() qui prend comme paramètre
un identifiant de répertoire. La prochaine lecture sera la première du répertoire.
11.2.4 Récupérer toutes les entrées
Même   s'il   est   possible   de   récupérer   l'ensemble   des   entrées   d'un   répertoire   avec   les   fonctions
S. ROHAUT Cours Programmation PHP Page 54/93précédentes et une boucle, la fonction scandir() propose la même chose, en une ligne et en plaçant
tous les noms de fichiers du chemin indiqué dans un tableau. Le premier paramètre est un chemin de
répertoire. Le second est optionnel et définit l'ordre du tri qui est alphabétique par défaut. Un « 1 »
indique un tri alphabétique décroissant.
$files=scandir('./rep');
print_r($files);
Travail sur le système de fichiers
Informations sur le fichier
On peut obtenir diverses informations sur un fichier à l'aide des commandes de type is_x() :
is_dir() : TRUE si le nom de fichier est un répertoire
is_file() : TRUE si le nom de fichier est un véritable fichier normal
is_executable() : TRUE si le fichier est exécutable. Sous Windows il faut PHP 5.x.
is_readable() : TRUE sir le fichier est lisible
is_writeable(), is_writable() : TRUE si le fichier est accessible en écriture
is_link() : TRUE si le fichier est un lien.
De même, on peut obtenir des détails sur un fichier avec les fonctions filexxx() :
file_exists() : TRUE si le fichier existe
fileatime()  : retourne sous forme de TIMESTAMP la dernière date d'accès. Sous Windows, ce
sera la dernière date de modification.
filectime() : retourne la date de création
filemtime() : retourne la date de modification
filegroup()  : retourne le GID du fichier.  On récupère le nom réel du groupe avec  la fonction
posix_getgrgid().
fileowner() : retourne le UID du fichier. On récupère le nom réel de l'utilisateur avec la fonction
posix_getpwuid().
fileinode() : retourne l'inode du fichier
fileperms()  :   retourne  les permissions du  fichier.  ATTENTION  le  résultat  est  en base 10.   Il
faudra convertir en base 8 avec la fonction base_convert().
filesize() : retourne la taille du fichier en octets.
S. ROHAUT Cours Programmation PHP Page 55/93– filetype() : retourne le type du fichier. ATTENTION il s'agit des types de fichiers sur disque, pas
de leur contenu (image, etc) : fifo, char, dir, block, link, file, unknown.
Si  un fichier est  déjà ouvert  on peut  obtenir des  informations avec  la fonction  fstat()  qui  prend
comme paramètre un identifiant de fichier retourné par fopen() et qui retourne un tableau indexé
numériquement  ou associatif.  La  fonction  stat()  retourne  la même chose mais on  lui  précise un
chemin ou nom de fichier. La fonction lstat() est quasi-identique sauf que dans le cadre du lien, ce
sont les informations sur le lien lui-même (et pas le fichier pointé) qui sont retournées.
0. volume (ou encore dev)
1. inode (ou encore ino)
2. droits   d'accès   au   fichier   (mode   de   protection   du   inode).  A  convertir   en   octal.  Voir   aussi
fileperms(). (ou encore mode)
3. nombre de liens (ou encore nlink)
4. id de l'utilisateur propriétaire (ou encore uid)
5. id du groupe propriétaire (ou encore gid)
6. type du volume de l'inode * (ou encore rdev )
7. taille en octets (ou encore size)
8. date du dernier accès (ou encore atime)
9. date de la dernière modification (ou encore mtime)
10.date du dernier changement (ou encore ctime)
11.taille de bloc du système pour les entrées/sorties * (ou encore blksize)
12.nombre de blocs alloués (ou encore blocks)
11.3.2 Actions sur les fichiers et répertoires
On retrouve ici des fonctions qui portent souvent le même nom que leurs équivalents sous le shell
Unix :
dirname(), basemane() : isolent le chemin et le nom d'un fichier
chown(), chgrp() : changent le propriétaire et le groupe d'un fichier. Le premier paramètre est le
fichier, le second le groupe ou le propriétaire (UID, GID, ou en toutes lettres)
chmod() : modifie les droits. Le premier paramètre est le nom du fichier, le second les droits en
octal. ATTENTION sous Windows, les résultats peuvent surprendre...
S. ROHAUT Cours Programmation PHP Page 56/93– copy() : copie d'un fichier : source et destination
link() : créé un lien hard link: cible, nom du lien
symlink() : créé un lien symbolique : cible, nom du lien
mkdir()  :   créé  un  répertoire,   le   second paramètre   est   le  mode   (droits  par  défaut)  AVANT
application du masque.
rename() : renomme et/ou déplace un fichier : orgine, destination.
rmdir() : supprime un répertoire. Il doit être vide.
unlink() : supprime un fichier.
umask() : modifie le umask par défaut
Upload de fichiers
L'upload   de   fichiers   permet   d'envoyer   depuis   un   poste   client   un   fichier   sur   le   serveur.  Cette
opération nécessite un navigateur sachant prendre en charge une balise spéciale et l'appel d'un script
PHP.
Côté Page HTML, il faut modifier la définition d'un formulaire, placer le champ formulaire de type
FILE  et   indiquer   la   taille  maximale   du   fichier   téléchargé   avec   un   nom  HIDDEN  de   bom
MAX_FILE_SIZE.   Cette   taille   est   précisée   en   octets.   Ce   champ   doit   être   placé   AVANT
l'apparition du champ de type FILE.
Le formulaire doit être de type POST (bien que GET soit possible, voir documentation PHP) et le
type d'encodage ENCTYPE "/multipart/form-data" doit être précisé.
<form ENCTYPE="multipart/form-data" action="/page.php" method="post">
 <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="35840">
 <INPUT NAME="avatar" TYPE="file" SIZE=50>
 <input type="submit" value="Enregistrer"/>
</form>
Notes   :  Certains  navigateurs   se   fichent   totalement  du poid  (taille)  des   fichiers   envoyés   en ne
réagissant pas à la variable MAX_FILE_SIZE. Dans ce cas la vérification doit être faite du côté du
serveur.   Au   pire   on   peut   limiter   côté   serveur   la   taille   maximale   à   l'aide   du   paramètre
upload_max_filesize dans le php.ini.
On choisit  son fichier via la boite de dialogue du gestionnaire de fichiers quand on clique sur le
bouton Parcourir. Une fois le formulaire validé, les données du formulaire et le fichier sont envoyés
à la page PHP.
Côté PHP, on récupère les informations sur le fichier uploadé via un tableau $_FILE dont les index
sont les suivants $_FILE[nom][propiete] le nom étant le nom du champ du formulaire FILE et la
propriété :
– $_FILES['userfile']['name'] : Le nom original du fichier, tel que sur la machine du client web.
S. ROHAUT Cours Programmation PHP Page 57/93– $_FILES['userfile']['type'] : Le type MIME du fichier, si le navigateur a fourni cette information.
Par exemple, cela pourra être "image/gif"
– $_FILES['userfile']['size'] : La taille, en octets, du fichier téléchargé.
– $_FILES['userfile']['tmp_name'] : Le nom temporaire du fichier qui sera chargé sur la machine
Serveur.
– $_FILES['userfile']['error'] : Le code d'erreur associé au téléchargement de fichier (PHP 4.2)
Par défaut le fichier téléchargé et en attente de déplacement est placé dans le répertoire temporaire
du système (variable système TEMP ou TMPDIR) ou dans le répertoire précisé par le paramètre de
configuration  upload_tmp_dir  du   fichier   php.ini.   Il   est   conseillé   d'initialiser   et   d'utiliser   ce
paramètre. Le chemin du fichier temporaire uploadé est donc :
$tmp_file=ini_get("upload_tmp_dir").'/'.$_FILE['userfile']['tmp_name'];
Pour   savoir   si  un  fichier  a été correctement  uploadé par   la méthode POST,  on peut  utiliser   la
fonction is_uploaded_file() qui prend comme paramètre le nom du fichier uploadé.
if(is_uploaded_file($_FILE['userfile']['name'])) {// ou tmp_name
 echo $_FILES['userfile']['size'];
}
Sachant la position du fichier temporaire uploadé et s'il a été correctement uploadé, on peut utiliser
la fonction copy. Mais le mieux est d'utiliser la fonction move_uploaded_file() qui teste la réussite
de l'upload et qui déplace le fichier. Le premier paramètre est le nom du fichier uploadé. Ce peut
être le nom du champ FILE, le nom réel du fichier ou le nom du fichier temporaire.
if(move_uploaded_file($_FILES['avatar']['tmp_name'],$_SERVER['DOCUMENT_ROOT']."/
forum/avatars/$login".$_FILES['avatar']['name'])) {
 $avatar=$login.$_FILES['avatar']['name'];
 chmod($_SERVER['DOCUMENT_ROOT']."/forum/avatars/$avatar",0644);
}
S. ROHAUT Cours Programmation PHP Page 58/9312 Travail sur chaînes
12.1 Fonctions pour code HTML et MySQL

Aucun commentaire:

Enregistrer un commentaire