Gestion des fichiers

Gestion des fichiers

31 mars 2022

Créer et ouvrir un fichier

Pour ouvrir un fichier existant ou créer un nouveau fichier en PHP, nous utiliserons la fonction fopen() qui gère deux paramètres obligatoires :

1. Nom du fichier

Inscrire le nom du fichier qui doit être ouvert dans une chaîne de caractère. Pensez bien à mettre le chemin relatif si le fichier est un fichier local. Il est possible d'y mettre un fichier distant en y inscrivant une URL.

2. Le mode d'ouverture

  • r — Ouvre un fichier en lecture seule. Le pointeur commence au début du fichier.
  • w — Ouvre un fichier pour écriture uniquement. Efface le contenu de celui-ci ou crée un nouveau fichier s'il n'existe pas. Le pointeur commence au début du fichier.
  • a — Ouvre un fichier pour écriture exclusivement. Les données existantes dans le fichier sont conservées. Le pointeur commence à la fin du fichier. Crée un nouveau fichier si celui-ci n'existe pas.
  • x — Crée un nouveau fichier pour écriture exclusivement. Retourne false et une erreur si le fichier existe déjà.
  • r+ — Ouvre un fichier en lecture/écriture. Le pointeur de fichier commence au début de celui-ci.
  • w+ — Ouvre un fichier en lecture/écriture. Efface le contenu de celui-ci ou crée un nouveau fichier s'il n'existe pas. Le pointeur commence au début du fichier.
  • a+ — Ouvre un fichier en lecture/écriture. Les données existantes dans le fichier sont conservées. Le pointeur commence à la fin du fichier. Crée un nouveau fichier si le fichier n'existe pas.
  • x+ — Crée un nouveau fichier en lecture/écriture. Retourne false et une erreur si le fichier existe déjà.

En retour de cette fonction, vous aurez soit un false en cas de problème ou une ressource de pointeur de fichier en cas de succès.

Faites bien attention au mode que vous employez afin d'éviter des surprises ! Comme vider le contenu d'un fichier par exemple.

try {
    $file = fopen("file.txt", "r");
}
catch (Exception $e) {
    echo "Erreur : ". $e->getMessage();
}

Lire un fichier

readfile()

La fonction readfile() lit le contenu complet d'un fichier et stock dans le buffer de sortie. Passez-en son paramètre le nom du fichier à lire.

try {
    $file = readfile("file.txt");
}
catch (Exception $e) {
    echo "Erreur : ".$e->getMessage();
}

fread()

Vous pouvez aussi lire un fichier ouvert avec la fonction fopen() grâce à la fonction fread() :

try {
    $filename = "file.txt";
    $file = fopen($filename, "r");
    echo fread($file, filesize($filename));
}
catch (Exception $e) {
    echo "Erreur : ". $e->getMessage();
}

La fonction filesize() en second paramètre permet de spécifier une taille en octets égale à celle du fichier.

fgets()

La fonction fgets() retourne une ligne du fichier ouvert avec fopen(). Il gère deux paramètres, le nom du fichier à lire et le nombre d'octets à lire. Le second argument arrêtera automatiquement la lecture à longueur moins 1 octet ou lorsqu'une nouvelle ligne se produit ou sur un EOF. Si ce paramètre n'est pas renseigné, la lecture se fera jusqu'à la fin de la ligne.

Dans le cas où vous souhaitez lire un fichier ligne par ligne, il faudra répéter cette fonction autant de fois que le fichier possède de lignes. Bon, il y a plus simple. Nous allons utiliser cette fonctionnalité couplée à une autre fonction feof(), qui permet de vérifier si nous sommes à la fin du fichier.

try {
    $filename = "file.txt";
    $file = fopen($filename, "r");
    $content = null;

    while(!feof($filename)) {
        $content .= fgets($filename) . "\n";
    }

    fclose($file);
    echo $content;
}
catch (Exception $e) {
    echo "Erreur : ". $e->getMessage();
}

fgetc()

Cette fonction est particulière, car elle lit un caractère sur un fichier.

Attention ! Cette dernière n'est pas faite pour lire le contenu d'un fichier au complet, parce que celle-ci est lente et n'est pas forcément utile pour cela.

try {
    $filename = "file.txt";
    $file = fopen($filename, "r");
    $content = null;

    while(!feof($filename)) {
        $content .= fgetc($filename);
    }

    fclose($file);
    echo $content;
}
catch (Exception $e) {
    echo "Erreur : ". $e->getMessage();
}

Écrire dans un fichier

La fonction fwrite() est utilisée pour écrire dans un fichier. La fonction s'arrêtera à la fin du fichier EOF ou lorsqu'elle atteint la longueur spécifiée.

Cette fonction assurera deux paramètres, le fichier dans lequel écrire et la chaîne de caractère à écrire dans celui-ci. Pour que l'écriture fonctionne, pensez à passer le mode de fopen() à w.

try {
    $filename = "file.txt";
    $file = fopen($filename, "w");
    fwrite($file, "Ceci est le texte à inscrire dans mon fichier");
    fclose($file);
}
catch (Exception $e) {
    echo "Erreur : ". $e->getMessage();
}

Fermer un fichier

La fonction fclose() est utilisée pour fermer un fichier ouvert. C'est une bonne pratique en programmation de fermer tous les fichiers une fois que vous en avez fini avec eux afin qu'ils ne continuent pas à fonctionner sur votre serveur en prenant des ressources.

Vous pouvez voir que j'ai déjà utilisé cette fonction dans les codes ci-dessus.