Si le stockage et l'accès à des données se fait très souvent par l'intermédiaire de bases de données, le recours à de simples fichiers est parfois utile, voire nécessaire.

Comme à son habitude, PHP fournit un grand nombre de fonctions pour traiter les fichiers.

Pour les exemples, nous utiliserons le dossier test_fichiers avec le contenu et l'arborescence ci-contre.

Ce dossier se trouve dans le dossier test du tutoriel. Vous pouvez voir son contenu avec le bouton dans la barre de menu du tutoriel.

Si vous ne voyez pas ce dossier, ou si vous voulez le ré-initialiser utilisez ce script.

### Existence d'un fichier

Nous commencerons par déterminer si un fichier existe avec la fonction file_exists().

Exemple : existence d'un fichier
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Existence d\'un fichier'); //------------------------------------------------------ $fichier = 'test_fichiers/commentaires.txt'; htmlInfo($fichier); if (file_exists($fichier)) { echo 'Existe'; } else { echo 'N\'existe pas'; } //------------------------------------------------------ $fichier = 'test_fichiers/remarques.txt'; htmlInfo($fichier); echo (file_exists($fichier)) ? 'Existe' : 'N\'existe pas'; htmlFin(); ?>

La fonction file_exists() ne différencie pas les fichiers des dossiers. Si nous l'utilisons avec un nom de dossier, elle renverra aussi TRUE si le dossier existe, FALSE sinon. Notre dossier test contient un sous-dossier images et un sous-dossier export. Si nous passons ces noms comme argument à file_exists(), le résultat sera TRUE.

Exemple : existence d'un fichier
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Existence d\'un fichier'); //------------------------------------------------------ $fichier = 'test_fichiers/commentaires.txt'; htmlInfo($fichier); echo (file_exists($fichier)) ? 'Existe' : 'N\'existe pas'; //------------------------------------------------------ $fichier = 'test_fichiers/images'; htmlInfo($fichier); echo (file_exists($fichier)) ? 'Existe' : 'N\'existe pas'; //------------------------------------------------------ $fichier = 'test_fichiers/export'; htmlInfo($fichier); echo (file_exists($fichier)) ? 'Existe' : 'N\'existe pas'; htmlFin(); ?>

### Dossier ou fichier ?

Heureusement, des fonctions nous indiquent quel est le type d'un fichier, et en particulier : is_dir() et is_file().

Exemple : existence et type d'un fichier
<?php ob_start(); require('bib_fonctions.php'); //====================================================== /** * Renvoie des informations sur un fichier * @param string $fichier Fichier * @return array Tableau associatif d'informations */ function fichierInfos($fichier) { $t = array('file' => '---'); if (!file_exists($fichier)) { return $t; } $t['file'] = is_file($fichier) ? 'oui' : 'non'; return $t; } //====================================================== htmlDebut('Existence d\'un fichier'); $fichier = 'test_fichiers/commentaires.txt'; htmlInfo($fichier); $f = fichierInfos($fichier); infoTableau($f); $fichier = 'test_fichiers/remarques.txt'; htmlInfo($fichier); $f = fichierInfos($fichier); infoTableau($f); $fichier = 'test_fichiers/images'; htmlInfo($fichier); $f = fichierInfos($fichier); infoTableau($f); htmlFin(); ?>

### Chemin d'accès

Nous pouvons obtenir le chemin d'accès complet et absolu d'un fichier avec la fonction realpath(). Cette fonction ne vérifie pas que le fichier existe. Elle renvoie un chemin d'accès à partir de la racine du disque dur du serveur.

- Si le nom de fichier passé en argument commence par un / ou un \, la fonction ne calcule pas le chemin car elle considère que l'on se trouve à la racine du disque.
- Si le nom de fichier passé en argument contient des liens symboliques comme ./ ou ../, la fonction les résoud.

La fonction dirname() renvoie la partie dossiers d'un chemin d'accès. La fonction baseName() renvoie le nom de fichier d'un chemin d'accès.

Exemple : chemin absolu
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Chemin absolu'); //------------------------------------------------------ $fichier = 'test_fichiers/commentaires.txt'; htmlInfo("Chemin Absolu de $fichier"); $absolu = realpath($fichier); echo $absolu; //------------------------------------------------------ htmlInfo('Dirname'); echo dirname($absolu); //------------------------------------------------------ htmlInfo('Basename'); echo baseName($absolu); htmlFin(); ?>

La fonction pathinfo() renvoie des informations sur un chemin sous la forme d'un tableau associatif de trois clés : dirname, baseName et extension.

Exemple : chemin
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Chemin'); //------------------------------------------------------ $fichier = 'test_fichiers/commentaires.txt'; htmlInfo("Chemin Absolu de $fichier"); $absolu = realpath($fichier); echo $absolu; //------------------------------------------------------ htmlInfo('Pathinfo'); $t = pathinfo($absolu); infoTableau($t); htmlFin(); ?>