nicolas2-dev / npds-filesystem
Comprehensive filesystem utility library with Laravel-like API and integrated file finder
Installs: 3
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/nicolas2-dev/npds-filesystem
Requires
- php: ^8.0
- nicolas2-dev/npds-filefinder: ^2.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.0
Suggests
- ext-fileinfo: For MIME type detection
- ext-json: For JSON file operations
- ext-mbstring: For multibyte string support
This package is auto-updated.
Last update: 2025-12-19 22:31:25 UTC
README
Documentation complète de la classe Npds\Filesystem\Filesystem pour la gestion des fichiers et dossiers en PHP.
Installation et initialisation
use Npds\Filesystem\Filesystem; $fs = new Filesystem();
Constructeur et recherche
1. Constructeur
Crée une instance de la classe Filesystem pour accéder à tous les services de gestion de fichiers.
$fs = new Filesystem();
2. find()
Crée un FileFinder configuré pour chercher des fichiers avec des critères personnalisés.
$finder = $fs->find('/mon/dossier'); // Avec plusieurs chemins $finder = $fs->find(['/dossier1', '/dossier2']);
Listage et recherche
3. files()
Liste les fichiers d'un dossier sans récursivité.
$fichiers = $fs->files('/mon/dossier'); // Inclure les fichiers cachés $fichiersAvecCaches = $fs->files('/mon/dossier', true);
4. allFiles()
Liste tous les fichiers de manière récursive dans un dossier et ses sous-dossiers.
$tousFichiers = $fs->allFiles('/mon/projet'); // Avec fichiers cachés $tousAvecCaches = $fs->allFiles('/mon/projet', true);
5. directories()
Liste les dossiers d'un répertoire sans récursivité.
$dossiers = $fs->directories('/mon/dossier');
6. allDirectories()
Liste tous les dossiers de manière récursive.
$tousDossiers = $fs->allDirectories('/mon/projet');
7. findFiles()
Recherche de fichiers avec des critères avancés.
$fichiersPHP = $fs->findFiles('/src', [ 'extensions' => ['php'], 'contains' => 'class', 'sortByName' => true ]);
8. findDirectories()
Recherche de dossiers avec des critères spécifiques.
$dossiersRecents = $fs->findDirectories('/backup', [ 'date' => '>= 2024-01-01', 'sortByModified' => true ]);
9. glob()
Recherche par motif utilisant la syntaxe glob standard.
$fichiersConf = $fs->glob('/etc/*.conf'); // Uniquement les dossiers $dossiersSeuls = $fs->glob('/var/*', GLOB_ONLYDIR);
10. globRecursive()
Recherche récursive par motif.
$tousFichiersLog = $fs->globRecursive('/var/log/*.log');
11. findPaths()
Recherche et retourne les chemins complets des fichiers correspondants.
$cheminsImages = $fs->findPaths('/uploads', [ 'extensions' => ['jpg', 'png', 'gif'], 'size' => '> 100K' ]);
12. findNames()
Recherche et retourne uniquement les noms des fichiers.
$nomsLogs = $fs->findNames('/logs', [ 'name' => '*.log', 'sortByModified' => true ]);
Opérations sur fichiers
13. exists()
Vérifie si un chemin (fichier ou dossier) existe.
if ($fs->exists('/chemin/fichier.txt')) { echo "Le fichier existe"; }
14. get()
Lit et retourne le contenu complet d'un fichier.
$contenu = $fs->get('/fichier.txt'); // Lecture avec verrou exclusif $contenuVerrouille = $fs->get('/fichier.txt', true);
15. put()
Écrit du contenu dans un fichier (crée le fichier s'il n'existe pas, sinon le remplace).
$succes = $fs->put('/nouveau.txt', 'Contenu du fichier'); // Écriture avec verrou exclusif $succesVerrou = $fs->put('/important.txt', 'Données critiques', true);
16. append()
Ajoute du contenu à la fin d'un fichier existant.
$fs->append('/log.txt', "Nouvelle entrée\n");
17. prepend()
Ajoute du contenu au début d'un fichier.
$fs->prepend('/config.php', "<?php\n// Fichier généré\n");
18. delete()
Supprime un ou plusieurs fichiers.
// Supprimer un fichier $fs->delete('/fichier.txt'); // Supprimer plusieurs fichiers $fs->delete(['/fichier1.txt', '/fichier2.txt']);
19. move()
Déplace un fichier d'un emplacement à un autre.
$fs->move('/ancien.txt', '/nouveau.txt');
20. copy()
Copie un fichier vers une nouvelle destination.
$fs->copy('/original.jpg', '/backup.jpg');
21. link()
Crée un lien symbolique vers un fichier.
$fs->link('/target/file', '/link/to/file');
22. lines()
Lit un fichier ligne par ligne en utilisant un générateur (idéal pour les gros fichiers).
foreach ($fs->lines('/fichier.csv') as $ligne) { echo $ligne . "\n"; }
Informations sur fichiers
23. mimeType()
Obtient le type MIME d'un fichier.
$type = $fs->mimeType('/image.jpg'); // Retourne: 'image/jpeg'
24. size()
Obtient la taille d'un fichier en octets.
$taille = $fs->size('/archive.zip');
25. lastModified()
Obtient le timestamp de la dernière modification.
$timestamp = $fs->lastModified('/fichier.txt'); $date = date('Y-m-d H:i:s', $timestamp);
26. isFile()
Vérifie si le chemin pointe vers un fichier.
if ($fs->isFile('/chemin')) { echo "C'est un fichier"; }
27. isDirectory()
Vérifie si le chemin pointe vers un dossier.
if ($fs->isDirectory('/chemin')) { echo "C'est un dossier"; }
28. isReadable()
Vérifie si un fichier est lisible.
if ($fs->isReadable('/fichier.txt')) { echo "Fichier lisible"; }
29. isWritable()
Vérifie si un fichier est inscriptible.
if ($fs->isWritable('/fichier.txt')) { echo "Fichier inscriptible"; }
Opérations sur dossiers
30. makeDirectory()
Crée un ou plusieurs dossiers.
// Créer un dossier simple $fs->makeDirectory('/nouveau/dossier', 0755); // Créer récursivement (avec tous les parents) $fs->makeDirectory('/nouveau/dossier/profond', 0755, true);
31. moveDirectory()
Déplace un dossier entier avec tout son contenu.
// Déplacer et écraser si la destination existe $fs->moveDirectory('/ancien', '/nouveau', true);
32. copyDirectory()
Copie un dossier et tout son contenu de manière récursive.
$fs->copyDirectory('/source', '/destination');
33. deleteDirectory()
Supprime un dossier et tout son contenu de manière récursive.
$fs->deleteDirectory('/dossier/supprimer');
34. cleanDirectory()
Vide complètement un dossier en supprimant tout son contenu.
$fs->cleanDirectory('/tmp/cache');
35. ensureDirectoryExists()
S'assure qu'un dossier existe, le crée s'il n'existe pas.
$fs->ensureDirectoryExists('/chemin/vers/dossier');
Informations chemin
36. extension()
Obtient l'extension d'un fichier.
$ext = $fs->extension('/fichier.txt'); // Retourne: 'txt'
37. name()
Obtient le nom du fichier sans extension.
$nom = $fs->name('/fichier.txt'); // Retourne: 'fichier'
38. basename()
Obtient le nom du fichier avec extension.
$basename = $fs->basename('/chemin/fichier.txt'); // Retourne: 'fichier.txt'
39. dirname()
Obtient le chemin du dossier parent.
$parent = $fs->dirname('/chemin/vers/fichier.txt'); // Retourne: '/chemin/vers'
40. type()
Retourne le type de l'élément : 'file', 'dir', ou 'link'.
$type = $fs->type('/chemin'); // Retourne: 'file', 'dir', ou 'link'
Permissions et propriété
41. chmod()
Change les permissions d'un fichier.
$fs->chmod('/script.sh', 0755);
42. chown()
Change le propriétaire d'un fichier ou dossier.
// Changer le propriétaire $fs->chown('/fichier', 'www-data'); // Changer le propriétaire récursivement $fs->chown('/dossier', 'www-data', true);
43. chgrp()
Change le groupe d'un fichier ou dossier.
// Changer le groupe $fs->chgrp('/fichier', 'www-data'); // Changer le groupe récursivement $fs->chgrp('/dossier', 'www-data', true);
Autres opérations
44. rename()
Renomme un fichier ou dossier.
$fs->rename('/ancien.txt', '/nouveau.txt');
45. json()
Lit un fichier JSON et le retourne en tant que tableau PHP.
$config = $fs->json('/config.json', true); // Retourne un tableau PHP
46. putJson()
Écrit des données PHP en tant que fichier JSON.
$data = ['nom' => 'test', 'valeur' => 123]; $fs->putJson('/data.json', $data);
47. getRequire()
Inclut un fichier PHP et retourne son résultat.
$config = $fs->getRequire('/config.php');
48. getRequireOnce()
Inclut un fichier PHP une seule fois et retourne son résultat.
$fonctions = $fs->getRequireOnce('/functions.php');
49. replace()
Écrit un contenu de manière atomique (remplace le fichier de façon sécurisée).
$fs->replace('/config.php', '<?php return [];');
50. relativePath()
Calcule le chemin relatif entre deux chemins.
$relatif = $fs->relativePath('/var/www', '/var/www/public/index.php'); // Retourne: 'public/index.php'
51. touch()
Met à jour la date d'accès et de modification d'un fichier.
// Met à jour à l'heure actuelle $fs->touch('/fichier.txt'); // Met à jour à un timestamp spécifique $fs->touch('/fichier.txt', time() - 3600); // Il y a une heure
52. readlink()
Lit la cible d'un lien symbolique.
$cible = $fs->readlink('/lien');
53. stat()
Obtient les informations système détaillées d'un fichier.
$infos = $fs->stat('/fichier.txt'); // Tableau avec: size, atime, mtime, ctime, etc.
54. isLink()
Vérifie si le chemin pointe vers un lien symbolique.
if ($fs->isLink('/lien')) { echo "C'est un lien symbolique"; }
55. fileInfo()
Retourne un objet SplFileInfo avec toutes les informations du fichier.
$info = $fs->fileInfo('/fichier.txt'); echo $info->getSize(); echo $info->getMTime();
Méthodes protégées et internes
Ces méthodes sont utilisées en interne par la classe et ne doivent généralement pas être appelées directement.
56. sharedGet()
Lecture avec verrou partagé (utilisée en interne par get()).
57. putWithLock()
Écriture avec verrou exclusif (utilisée en interne par put()).
58. guessMimeTypeByExtension()
Devine le type MIME en fonction de l'extension du fichier (utilisée en interne par mimeType()).
Exemples complets
Exemple 1 : Backup d'un dossier
function backupDossier(Filesystem $fs, string $source, string $destination) { if (!$fs->exists($destination)) { $fs->makeDirectory($destination, 0755, true); } $fs->copyDirectory($source, $destination); echo "Backup terminé: " . count($fs->allFiles($destination)) . " fichiers copiés"; }
Exemple 2 : Nettoyage de fichiers temporaires
function nettoyerTemporaires(Filesystem $fs, string $dossier, int $jours) { $limite = time() - ($jours * 86400); $fichiers = $fs->findFiles($dossier, [ 'date' => '< ' . date('Y-m-d', $limite), 'name' => '*.tmp' ]); foreach ($fichiers as $fichier) { $fs->delete($fichier->getPathname()); } echo count($fichiers) . " fichiers nettoyés"; }
Exemple 3 : Recherche de fichiers contenant du texte
function rechercherDansFichiers(Filesystem $fs, string $dossier, string $texte) { $resultats = $fs->findFiles($dossier, [ 'contains' => $texte, 'extensions' => ['php', 'txt', 'html'] ]); foreach ($resultats as $fichier) { echo "Trouvé dans: " . $fichier->getPathname() . "\n"; } }
Exemple 4 : Synchronisation de deux dossiers
function synchroniserDossiers(Filesystem $fs, string $source, string $cible) { // Nettoyer la cible $fs->cleanDirectory($cible); // Copier tous les fichiers $fichiers = $fs->allFiles($source); foreach ($fichiers as $fichier) { $cheminRelatif = $fs->relativePath($source, $fichier->getPathname()); $cibleChemin = $cible . '/' . $cheminRelatif; $fs->ensureDirectoryExists(dirname($cibleChemin)); $fs->copy($fichier->getPathname(), $cibleChemin); } echo "Synchronisation terminée"; }
Exemple 5 : Analyse d'un dossier
function analyserDossier(Filesystem $fs, string $dossier) { $stats = [ 'total_fichiers' => count($fs->allFiles($dossier)), 'total_dossiers' => count($fs->allDirectories($dossier)), 'taille_totale' => 0, 'extensions' => [], 'fichiers_recents' => [] ]; foreach ($fs->allFiles($dossier) as $fichier) { // Taille totale $stats['taille_totale'] += $fs->size($fichier->getPathname()); // Extensions $ext = $fs->extension($fichier->getPathname()); $stats['extensions'][$ext] = ($stats['extensions'][$ext] ?? 0) + 1; // Fichiers récents (moins de 7 jours) if ($fs->lastModified($fichier->getPathname()) > time() - 604800) { $stats['fichiers_recents'][] = $fichier->getPathname(); } } return $stats; }
Cas d'utilisation courants
1. Logging
$fs->append('/var/log/app.log', date('Y-m-d H:i:s') . " - Action effectuée\n");
2. Configuration
$config = $fs->json('/etc/app/config.json') ?? []; $config['dernier_acces'] = time(); $fs->putJson('/etc/app/config.json', $config);
3. Upload de fichiers
$uploadDir = '/uploads/' . date('Y-m'); $fs->ensureDirectoryExists($uploadDir); $fs->move('/tmp/upload.jpg', $uploadDir . '/image.jpg');
4. Gestion du cache
$cacheFile = '/cache/' . md5($key) . '.cache'; // Vérifier si le cache est valide (moins de 1 heure) if ($fs->exists($cacheFile) && $fs->lastModified($cacheFile) > time() - 3600) { return $fs->get($cacheFile); } // Sinon, créer le cache $fs->put($cacheFile, $donnees);
5. Traitement de templates
$template = $fs->get('/templates/base.html'); $content = str_replace('{{title}}', $titre, $template); $fs->put('/output/page.html', $content);
Conseils d'utilisation
- Utilisez les méthodes
append()etprepend()pour ajouter du contenu sans remplacer le fichier entier - Préférez
lines()pour lire de gros fichiers afin de ne pas charger toute la mémoire - Utilisez
relativePath()pour créer des chemins portables - Toujours vérifier l'existence et les permissions avant d'opérer sur des fichiers critiques
- Utilisez
ensureDirectoryExists()avant de créer des fichiers dans un dossier qui pourrait ne pas exister - Profitez des options de verrou pour les opérations critiques sur des fichiers utilisés par plusieurs processus