Cours PHP Fichiers et Répertoires en PDF (Intermédiaire)
PHP : Fichiers et Répertoires : Ce qu'il faut savoir. Définition : ensemble des fonctions et méthodes PHP permettant d'ouvrir, lire, écrire, renommer et parcourir les fichiers et dossiers du système de fichiers, et d'utiliser la pseudo-classe dir pour naviguer dans un répertoire. Ces opérations sont au cœur des tâches serveur (logs, upload, stockage d'états, génération de ressources) et conditionnent la robustesse d'applications web côté back-end. Compatible avec les versions récentes de PHP (7.x/8.x), ce document, disponible au format PDF et facile à télécharger, propose des exemples de code et des travaux pratiques pour appliquer ces mécanismes.
🎯 Ce que vous allez apprendre
- Fonctions de gestion de fichiers — identification et manipulation via un identificateur/ressource :
fopen,fgets,fputs,fgetc,feof,readfile,unlink,fclose. Vous saurez comment ouvrir un flux, lire lignes ou octets, écrire des chaînes et fermer proprement la ressource pour éviter les fuites et l'incohérence des données. L'appel àfclose()libère la mémoire serveur associée au flux et permet de réduire le nombre de descripteurs ouverts, essentiel pour la stabilité applicative sous forte charge.Alternatives simplifiées :
file_get_contents()etfile_put_contents()offrent une API en une seule instruction pour lire ou écrire rapidement un fichier. Utiles pour des lectures/écritures atomiques simples ou des scripts d'administration, elles réduisent le code boilerplate lié à la gestion explicite des ressources. - Modes d'ouverture et comportement des streams — compréhension pratique des modes
'r','r+','w','w+','a','a+'et de leur impact sur le pointeur de fichier et la création/écrasement. Cette maîtrise permet de choisir le mode adapté (lecture seule, écriture append ou truncate) pour garantir l'intégrité des données et optimiser les accès disque. - Inspection et métadonnées de fichiers — fonctions utilitaires telles que
file_exists,filesize,filetype,copyetrename. Vous apprendrez à tester l'existence, obtenir la taille et le type d'un fichier et effectuer des opérations atomiques de copie/renommage nécessaires aux workflows de déploiement et sauvegarde. - Parcours de répertoires — API de gestion des dossiers :
chdir,getcwd,opendir,readdir,closedir,rewinddir. Vous serez capable d'itérer sur les entrées d'un dossier, filtrer ou lister les fichiers non triés et gérer le contexte du dossier courant dans des scripts serveur. - Pseudo-classe dir — utilisation de l'objet
diravec ses attributshandleetpathet ses méthodesread()etclose(). L'approche objet simplifie la lecture séquentielle d'un répertoire et rend le code plus lisible par rapport à l'usage direct des fonctions procédurales. - Exemples et travaux pratiques — reproduction de scripts fournis : affichage de contenu fichier, listing de répertoire et exercices de compteur de visites (
visite1.php,visite21.php,visite22.phpaveccompteur1.inc.phpetcompteur2.inc.php). Vous saurez implémenter un compteur persistant dans un fichier et anticiper les limites pratiques du stockage fichier.
📑 Sommaire du document
- Partie 1 : Introduction aux flux et ressources
- Partie 2 : Fonctions de gestion de fichiers (fopen, fgets, fclose...)
- Partie 3 : Modes d'ouverture et comportement des streams
- Partie 4 : Inspection et métadonnées de fichiers
- Partie 5 : Parcours et itération sur les répertoires
- Partie 6 : Pseudo-classe
diret approche objet - Partie 7 : Exemples pratiques et travaux dirigés
- Partie 8 : Sécurité, bonnes pratiques et cas d'usage
💡 Pourquoi choisir ce cours ?
Document concis issu du support BTS IRIS (Thierry VAIRA, intervenant pédagogique) : définitions techniques, extraits de code et exercices opérationnels. L'approche privilégie l'exemple pas-à-pas — chaque fonction est montrée en usage concret — ce qui facilite la transposition sur des projets existants ou hérités. Le PDF de 9 pages est adapté pour une montée en compétence ciblée sur la gestion des flux, des modes d'ouverture et du parcours de répertoires, sans surcharge théorique.
👤 À qui s'adresse ce cours ?
- Public cible : étudiants en BTS IRIS, développeurs web backend et administrateurs d'applications PHP qui doivent manipuler fichiers et répertoires côté serveur ou maintenir du code PHP procédural.
- Prérequis : connaissances de base en PHP (syntaxe, variables, boucles, include/require), et notions élémentaires d'administration de serveur (accès au système de fichiers et droits).
Alternatives modernes à fopen : file_get_contents et file_put_contents
Pour des lectures ou écritures rapides, file_get_contents et file_put_contents simplifient le code en évitant la gestion explicite des ressources. file_get_contents() peut lire un fichier local ou distant (si allow_url_fopen est activé) et convient pour charger le contenu complet en mémoire sous forme de chaîne. Attention aux limitations mémoire et aux implications liées aux permissions Linux lors de l'accès au système de fichiers serveur depuis des scripts PHP.
// Lecture d'un fichier local
$content = file_get_contents('/var/www/data/config.json');
// Lecture d'une ressource distante (si autorisé)
$remote = file_get_contents('https://example.com/data.txt');
if ($content === false) {
// gérer l'erreur : vérifier permissions, existence et configuration PHP
error_log('Échec de lecture : vérifier permissions Linux et chemin.');
}
Cas d'usage : Upload de fichiers
La gestion des répertoires est directement liée à la sécurité des téléchargements. Utiliser move_uploaded_file() pour déplacer les fichiers reçus vers un dossier contrôlé, vérifier le type MIME côté serveur et valider le nom du fichier empêche l'écriture hors du dossier attendu. Stocker les uploads en dehors de la racine web ou utiliser des règles d'accès renforce la sécurité.
- Vérifier que le répertoire cible est inscriptible (
is_writable) avant d'appelermove_uploaded_file. - Renommer de façon sûre les fichiers uploadés pour éviter les collisions et l'exécution de code.
Bonnes pratiques pour la manipulation de fichiers sur serveur
Contrôler les permissions, effectuer des écritures atomiques et gérer les verrous évite les corruptions et les conditions de course. La manipulation correcte des flux permet aussi de générer du contenu dynamique (pages pré-générées, caches statiques, exports) sans recourir systématiquement à une base SQL, utile pour des sites à faible volumétrie ou des scripts d'export.
- Écrire d'abord dans un fichier temporaire puis renommer atomiquement pour minimiser les risques de corruption.
- Utiliser
flockpour synchroniser les accès concurrents. - Contrôler les droits en lecture/écriture et journaliser les erreurs pour diagnostiquer les problèmes liés aux permissions Linux.
Sécuriser l'accès aux fichiers en PHP
Avant toute ouverture d'un fichier, vérifier les droits d'accès sur le système de fichiers pour éviter les erreurs d'écriture ou les exceptions runtime. Utilisez is_writable pour confirmer que le chemin cible est accessible en écriture, ou testez l'existence et la lisibilité avec is_readable. En cas de doute, écrire d'abord dans un fichier temporaire puis renommer atomiquement réduit les risques d'accès concurrent et de corruption du flux de données. Les manipulations de permissions peuvent nécessiter chmod (ou équivalent côté serveur) pour ajuster les droits d'accès avant l'opération.
Comment éviter les corruptions lors d'écritures concurrentes en PHP ?
Réponse : Synchroniser les accès : utiliser un mécanisme de verrouillage (par exemple flock en PHP) ou écrire dans des fichiers temporaires puis renommer atomiquement ; contrôler le pointeur et la séquence d'ouverture/fermeture évite les conditions de course. Vérifier les droits d'accès et la disponibilité du flux avant l'écriture avec is_writable est une précaution efficace.
Quelle est la différence entre la classe dir et opendir en PHP ?
Réponse : La pseudo-classe dir fournit un wrapper objet avec attributs (handle, path) et méthodes read() et close(), équivalentes aux fonctions procédurales readdir et closedir. L'approche objet améliore la lisibilité et l'encapsulation du parcours d'un répertoire.