L'exemple précédent n'a pas permis de montrer toutes les possibilités de PHP sur la manipulation des fichiers. Voici donc quelques informations annexes.

1- Tests sur les fichiers

PHP fournit de nombreuses fonctions permettant de faire des tests sur les fichiers pour connaître leurs propriétés.

is_dir()

is_dir() permet de savoir si le fichier dont le nom est passé en paramètre correspond à un répertoire. Renvoie la valeur 1 s' il s'agit d'un répertoire, la valeur 0 dans le cas contraire.

booléen is_dir(chaine Nom_du_fichier);

is_executable()

is_executable() permet de savoir si le fichier dont le nom est passé en paramètre est exécutable. Renvoie la valeur 1 si le fichier est exécutable, la valeur 0 dans le cas contraire.

booléen is_executable(chaine Nom_du_fichier);

is_file()

is_file() permet de savoir si le fichier dont le nom est passé en paramètre ne correspond ni à un répertoire, ni à un lien symbolique. Renvoie la valeur 1 s'il s'agit d'un fichier, la valeur 0 dans le cas contraire.

booléen is_file(chaine Nom_du_fichier);

is_link()

is_link() permet de savoir si le fichier dont le nom est passé en paramètre correspond à un lien symbolique. Renvoie la valeur 1 s'il s'agit d'un lien symbolique, la valeur 0 dans le cas contraire.

booléen is_link(chaine Nom_du_fichier);

Exemple :

  1. <?php
  2. if (is_dir("install")) {
  3. echo "Il s'agit d'un répertoire";
  4. }else {
  5. echo "Il ne s'agit pas d'un répertoire";
  6. }
  7. ?>

2- Autres façons de lire un fichier

Dans certains cas, il peut être rébarbatif de devoir mettre en oeuvre les fonctions fopen() et fgets() pour lire l'intégralité du contenu d'un fichier. Pour cette raison, PHP fournit des fonctions supplémentaires simplifiant certaines opérations.

file()

La fonction file() permet de retourner dans un tableau l'intégralité d'un fichier en mettant chacune de ses lignes dans un élément du tableau.

tableau file(chaine nomdufichier);

L'exemple suivant montre comment parcourir l'ensemble du tableau afin d'afficher le fichier.

  1. <?
  2. $fichier = "fichier.txt";
  3. if (file_exists($fichier)) { // on vérifie que le fichier existe
  4. if ($tableau = file($fichier)) { // ouverture du fichier, dans un tableau
  5. while(list(,$val)=each($tableau)){
  6. echo $val; // affichage de chaque ligne du fichier
  7. }
  8. } else {
  9. echo "Erreur, le fichier n'a pas pu être ouvert.";
  10. }
  11. } else {
  12. echo "Fichier introuvable !";
  13. }
  14. ?>

fpassthru()

La fonction fpassthru() permet d'afficher le contenu d'un fichier depuis un pointeur (et donc jusqu'à la fin du fichier).

booléen fpassthru(pointeur de fichier fp);

Il est donc, par exemple possible, de lire quelques lignes avec fgets(), puis d'envoyer le reste au navigateur, avec fpassthru().

readfile()

La fonction readfile() est similaire à fpassthru() dans la mesure où elle permet aussi d'afficher le texte contenu dans un fichier. Son utilisation est, par contre, différente puisqu'on lui passe un nom de fichier. Le second argument est optionnel et sert à définir si l'on souhaite chercher dans le "include_path".

booléen readfile(chaine nomdufichier[, booléen includepath]);

Notons qu'il est possible d'ouvrir une connection http ou ftp.

Exemples :

  1. <?php
  2.  
  3. $fichier = "fichier.txt";
  4.  
  5. if (file_exists($fichier)) { // on vérifie que le fichier existe
  6. if($fp = fopen($fichier,"r")){
  7. $texte_ligne = "-";
  8. while (!feof($fp) || $page != "$texte_ligne") { //on parcoure le fichier jusqu'a la ligne $texte_ligne, ou sinon jusqu'a la fin
  9. $page .= fgets($fp, 4096); // lecture du contenu de la ligne
  10. }
  11. fpassthru($fp); // affiche la fin du fichier
  12. fclose($fp);
  13. }
  14. }
  15.  
  16. readfile($fichier);
  17.  
  18. ?>

include() & require()

Et, évidemment, les indispensables fonctions require() et include() qui interprètent le code PHP se trouvant dans le fichier lu. En réalité, require inclut le code dans le fichier appelant, alors que include interprète le code au fur et à mesure. En pratique, on utilisera require pour inclure des librairies (souvent en début de script), et include pour le reste.
A noter que include est conditionnel alors que require ne l'est pas. Autrement dit, require ne doit pas être utilisé dans les instructions conditionnelles (boucles, if, etc..).

NB : Il existe aussi les fonctions include_once() et require_once(), pour inclure une seule fois le fichier appelé (le fichier ne sera pas inclus une deuxième fois si il a déjà été inclus avant).