Plus : lire et écrire un fichier en php

Il existe peu de méthodes différentes pour lire et écrire un fichier en php.

Précédent | 8/8

Remarque : lire un fichier demande des autorisations, le fichier pointé doit être accessible en lecture, mais il peut être local (sur le même hébergement que le script) ou distant (sur un autre hébergement). Par contre, écrire un fichier ne se fait que sur l’espace où est exécuté le script. Question de sécurité.

La méthode fopen en lecture seule

Lire un fichier se fait avec la fonction fopen, qui ouvre une connection avec le fichier et le lit par morceaux. Parce que le transit des pages html est dépendante d’un réseau, on ne peut lire le fichier distant comme un fichier sur un disque dur : on le récupère par morceaux.

<?php
if(!$fichier = fopen("http://www.google.fr", "r")) {
                echo "<div style='color:red'>lecture du fichier impossible</div>";
        } else {
        $lehtml="";
        // Tant quon est pas à la fin
        while (!feof($fichier)) {
        $buffer = fgets($fichier, 4096);
        $lehtml .=$buffer;
        }
echo $lehtml;
}
?>

$fichier est ce qui représente la connection au fichier. le "if" permet de tester que cette connection s’effectue. le "r" qui suit l’adresse signifie une ouverture en lecture seule (nous verrons l’ouverture en lecture/ecriture juste après). Les deux premières lignes signifient donc : si tu n’arrives pas à établir la connection avec le fichier, écrit "lecture du fichier impossible".
La suite du script va demander la lecture du fichier par morceaux avec la fonction fgets (4096 bits dans ce cas-ci) jusqu’à ce que la fin du fichier soit atteinte (eof signifiant "End of file"). Chaque morceau lu est ajouté à la variable $lehtml.

Lorsque la fin de fichier est atteinte, $lehtml contient tout le document html. On peut à partir de là en faire ce qu’on veut, comme le parser ou le tester.

Lire et écrire un fichier

La technique pour écrire est très simple, car on écrit en local et donc c’est plus simple, pas de "buffer", de lecture par morceaux du fichier. Voici un script de lecture/ecriture :

<?php
// on ouvre en lecture - ecriture
if(!$fichier = fopen("local.txt", "r+")) {
                echo "<div style='color:red'>lecture du fichier impossible</div>";
        } else {
        $lehtml="";
        // Tant quon est pas à la fin
        while (!feof($fichier)) {
        $buffer = fgets($fichier, 4096);
        $lehtml .=$buffer;
        }
       
        }
        // ajouter quelque chose à ce qui a ete lu
        $lehtml .="J'ajoute ceci";
       
        echo $lehtml;

        fseek($fichier, 0); // On remet le curseur de lecture/ecriture au début du fichier
        fputs($fichier, $lehtml);

// fermeture du fichier - important
fclose ($fichier);
        ?>

La différence ici est que le fichier est ouvert en "r+" au lieu de "r", en lecture et ecriture donc.

Fseek sert à déplacer la tête de lecture dans le fichier, ici pour le remettre à zéro et réécrire le fichier entièrement.

Fputs écrit dans le fichier ce que l’on veut y mettre. Ne pas oublier de fermer avec fclose.