Travailler avec le système de fichiers en PHP : fonctions et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec le système de fichiers en PHP : fonctions principales et exemples



Travailler avec le système de fichiers est l'une des tâches clés du développement web. PHP fournit un ensemble puissant et flexible de fonctions pour créer, lire, écrire, supprimer des fichiers et dossiers, ainsi que pour gérer les droits d'accès. Dans cet article, nous allons examiner les principales capacités de PHP pour travailler avec le système de fichiers, donner des exemples pratiques et aborder les erreurs typiques.



1. Lecture de fichiers en PHP



PHP prend en charge plusieurs façons de lire des données à partir de fichiers. Le choix de la méthode dépend de la taille du fichier et du niveau de contrôle requis.



1.1. Fonction file_get_contents()

La façon la plus simple de lire tout un fichier dans une chaîne est d'utiliser file_get_contents(). Cette fonction convient pour les petits fichiers (configurations, modèles).



<?php// Lecture de tout le fichier dans une chaîne$content = file_get_contents('data.txt');if ($content !== false) {    echo "Contenu du fichier : " . htmlspecialchars($content);} else {    echo "Erreur de lecture du fichier";}?>


1.2. Fonction file()

Si vous avez besoin d'obtenir le contenu d'un fichier sous forme de tableau de chaînes (une ligne par élément), utilisez file().



<?php$lines = file('log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);foreach ($lines as $lineNum => $line) {    echo "Ligne " . ($lineNum + 1) . " : " . htmlspecialchars($line) . "<br>";}?>


1.3. Lecture ligne par ligne avec fopen() + fgets()

Pour les gros fichiers (par exemple, les logs), il est préférable d'utiliser la lecture en flux pour ne pas garder tout le fichier en mémoire.



<?php$handle = fopen('large_file.csv', 'r');if ($handle) {    while (($buffer = fgets($handle, 4096)) !== false) {        echo $buffer . "<br>";    }    fclose($handle);} else {    echo "Impossible d'ouvrir le fichier";}?>


2. Écriture de données dans des fichiers



L'écriture peut également être effectuée de différentes manières. La principale différence est l'écrasement du fichier ou l'ajout à la fin.



2.1. Fonction file_put_contents()

Un moyen rapide d'écrire une chaîne dans un fichier. Si le fichier n'existe pas, il sera créé. Par défaut, le fichier est écrasé.



<?php$data = "Nouvelle entrée : " . date('Y-m-d H:i:s') . "";// Écrasement du fichierfile_put_contents('log.txt', $data);// Ajout à la fin (drapeau FILE_APPEND)file_put_contents('log.txt', $data, FILE_APPEND);?>


2.2. Écriture manuelle via fopen() + fwrite()

Pour un contrôle précis (par exemple, le verrouillage de fichier), utilisez la paire fopen() / fwrite().



<?php$filename = 'counter.txt';$handle = fopen($filename, 'c+'); // 'c+' — crée le fichier s'il n'existe pasif (flock($handle, LOCK_EX)) { // verrouillage exclusif    $current = (int) fread($handle, filesize($filename) ?: 1);    $current++;    ftruncate($handle, 0); // on vide le fichier    rewind($handle);    fwrite($handle, $current);    flock($handle, LOCK_UN); // on libère le verrouillage}fclose($handle);echo "Compteur : $current";?>


3. Travail avec les répertoires



PHP permet non seulement de gérer les fichiers, mais aussi de créer, supprimer et parcourir les dossiers.



3.1. Création de dossiers (mkdir)

<?php// Créer un dossierif (!is_dir('uploads')) {    mkdir('uploads', 0755);}// Création récursive de dossiers imbriqués (PHP 5.4+)mkdir('images/2024/12', 0755, true);?>


3.2. Suppression de dossiers (rmdir)

rmdir() supprime uniquement un dossier vide. Pour supprimer un dossier avec tout son contenu, une fonction récursive est nécessaire.



<?phpfunction deleteDirectory($dir) {    if (!file_exists($dir)) {        return true;    }    if (!is_dir($dir)) {        return unlink($dir);    }    $items = array_diff(scandir($dir), ['.', '..']);    foreach ($items as $item) {                

Blogs

Book Recommendations