Les utilitaires Folder et File sont des classes pratiques pour la lecture, l’écriture/l’ajout de fichiers, lister les fichiers d’un dossier et toute autre tâche habituelle liée aux répertoires.
Obsolète depuis la version 4.0: Les classes File
et Folder
vont être retirées dans la version 5.0.
Utilisez plutôt les classes SplFileInfo
ou SplFileObject
et les classes d’itérateurs comme
RecursiveDirectoryIterator
, RecursiveRegexIterator
etc.
Assurez-vous que les classes sont chargées:
use Cake\Filesystem\Folder;
use Cake\Filesystem\File;
Ensuite nous pouvons configurer une nouvelle instance de dossier:
$dir = new Folder('/path/to/folder');
et chercher tous les fichiers .php à l’intérieur de ce dossier en utilisant les regex:
$files = $dir->find('.*\.php');
Maintenant nous pouvons faire une boucle sur les fichiers et les lire, écrire/ajouter aux contenus, ou simplement supprimer le fichier:
foreach ($files as $file) {
$file = new File($dir->pwd() . DS . $file);
$contents = $file->read();
// $file->write('J'écris dans ce fichier');
// $file->append('J'ajoute à la fin de ce fichier.');
// $file->delete(); // Je supprime ce fichier
$file->close(); // Assurez-vous de fermer le fichier quand c'est fini
}
// Crée un nouveau dossier avec les permissions à 0755
$dir = new Folder('/path/to/folder', true, 0755);
Le chemin pour le dossier courant. Folder::pwd()
retournera la
même information.
Dit si la liste des résultats doit être oui ou non rangée par ordre alphabétique.
Mode à utiliser pour la création de dossiers. par défaut à 0755
. Ne fait
rien sur les machines Windows.
Retourne $path avec $element ajouté, avec le bon slash entre-deux:
$path = Folder::addPathElement('/un/chemin/pour', 'tester');
// $path égal /un/chemin/pour/tester
$element peut aussi être un tableau:
$path = Folder::addPathElement('/un/chemin/pour', ['un-autre', 'test']);
// $path égal à /un/chemin/pour/un-autre/test
Change le répertoire en $path. Retourne false
en cas d’échec:
$folder = new Folder('/foo');
echo $folder->path; // Affiche /foo
$folder->cd('/bar');
echo $folder->path; // Affiche /bar
$false = $folder->cd('/repertoire-inexistant');
Change le mode sur la structure de répertoire de façon récursive. Ceci inclut aussi le changement du mode des fichiers:
$dir = new Folder();
$dir->chmod('/path/to/folder', 0755, true, ['skip_me.php']);
Copie de façon récursive un répertoire. Le seul paramètre $options peut être soit un chemin à copier soit un tableau d’options:
$folder1 = new Folder('/path/to/folder1');
$folder1->copy('/path/to/folder2');
// mettra le folder1 et tout son contenu dans folder2
$folder = new Folder('chemin/vers/repertoire');
$folder->copy([
'to' => '/chemin/vers/nouveau/repertoire',
'from' => '/chemin/de/depart', // Va provoquer un cd()
'mode' => 0755,
'skip' => ['bon-a-ignorer.php', '.git'],
'scheme' => Folder::SKIP // Ne crée pas les répertoires/fichiers qui existent déjà.
]);
Il y a 3 schémas supportés:
Folder::SKIP
échapper la copie/déplacement des fichiers & répertoires
qui existent dans le répertoire de destination.
Folder::MERGE
fusionne les répertoires source/destination. Les
fichiers dans le répertoire source vont remplacer les fichiers dans le
répertoire de cible. Les contenus du répertoire seront fusionnés.
Folder::OVERWRITE
écrase les fichiers & répertoires existant dans le
répertoire cible avec ceux dans le répertoire source. Si la source et la
destination contiennent le même sous-répertoire, les contenus du
répertoire de cible vont être retirés et remplacés avec celui de la
source.
Retourne un ensemble correct de slashes pour un $path donné. (”\” pour les chemins Windows et “/” pour les autres chemins).
Crée une structure de répertoire de façon récursive. Peut être utilisée pour créer des structures de chemin profond comme /foo/bar/baz/shoe/horn:
$folder = new Folder();
if ($folder->create('foo' . DS . 'bar' . DS . 'baz' . DS . 'shoe' . DS . 'horn')) {
// Répertoires imbriqués créés avec succèse
}
Efface de façon récursive les répertoires si le système le permet:
$folder = new Folder('foo');
if ($folder->delete()) {
// Supprime foo et ses dossiers imbriqués avec succès
}
Retourne la taille en octets de ce dossier et ses contenus.
Récupère l’erreur de la dernière méthode.
Retourne un tableau de tous les fichiers correspondants dans le répertoire courant:
// Trouve tous les .png dans votre dossier webroot/img/ et range les résultats
$dir = new Folder(WWW_ROOT . 'img');
$files = $dir->find('.*\.png', true);
/*
Array
(
[0] => cake.icon.png
[1] => test-error-icon.png
[2] => test-fail-icon.png
[3] => test-pass-icon.png
[4] => test-skip-icon.png
)
*/
Note
Les méthodes find et findRecursive de folder ne trouvent seulement que des
fichiers. Si vous voulez obtenir des dossiers et fichiers, regardez
Folder::read()
ou Folder::tree()
.
Retourne un tableau de tous les fichiers correspondants dans et en-dessous du répertoire courant:
// Trouve de façon récursive les fichiers commençant par test ou index
$dir = new Folder(WWW_ROOT);
$files = $dir->findRecursive('(test|index).*');
/*
Array
(
[0] => /var/www/cake/webroot/index.php
[1] => /var/www/cake/webroot/test.php
[2] => /var/www/cake/webroot/img/test-skip-icon.png
[3] => /var/www/cake/webroot/img/test-fail-icon.png
[4] => /var/www/cake/webroot/img/test-error-icon.png
[5] => /var/www/cake/webroot/img/test-pass-icon.png
)
*/
Retourne true
si le fichier est dans un CakePath donné.
Retourne true
si le fichier est dans le chemin donné:
$Folder = new Folder(WWW_ROOT);
$result = $Folder->inPath(APP);
// $result = true, /var/www/example/ est dans /var/www/example/webroot/
$result = $Folder->inPath(WWW_ROOT . 'img' . DS, true);
// $result = true, /var/www/example/webroot/ est dans /var/www/example/webroot/img/
Retourne true
si le $path donné est un chemin absolu.
Retourne true
si le $path donné finit par un slash (par exemple. se
termine-par-un-slash):
$result = Folder::isSlashTerm('/my/test/path');
// $result = false
$result = Folder::isSlashTerm('/my/test/path/');
// $result = true
Retourne true
si le $path donné est un chemin Windows.
Récupère les messages de la dernière méthode.
Déplace le répertoire de façon récursive.
Retourne un chemin avec des slashes normalisés pour le système d’exploitation.
Retourne le chemin courant.
Retourne un tableau du contenu du répertoire courant. Le tableau retourné contient deux sous-tableaux: Un des repertoires et un des fichiers:
$dir = new Folder(WWW_ROOT);
$files = $dir->read(true, ['files', 'index.php']);
/*
Array
(
[0] => Array // dossiers
(
[0] => css
[1] => img
[2] => js
)
[1] => Array // fichiers
(
[0] => .htaccess
[1] => favicon.ico
[2] => test.php
)
)
*/
Récupère le vrai chemin (en prenant en compte « .. » etc…).
Retourne $path avec le slash ajouté à la fin (corrigé pour Windows ou d’autres OS).
Retourne un tableau de répertoires imbriqués et de fichiers dans chaque répertoire.
// Crée un nouveau fichier avec les permissions à 0644
$file = new File('/path/to/file.php', true, 0644);
L’objet Folder du fichier.
Le nom du fichier avec l’extension. Diffère de File::name()
qui retourne le nom sans l’extension.
Un tableau du fichier info. Utilisez File::info()
à la place.
Contient le fichier de gestion des ressources si le fichier est ouvert.
Active le blocage du fichier en lecture et en écriture.
Le chemin absolu du fichier courant.
Ajoute la chaîne de caractères donnée au fichier courant.
Ferme le fichier courant s’il est ouvert.
Copie le fichier vers $dest
.
Crée le fichier.
Supprime le fichier.
Retourne true
si le fichier est exécutable.
Retourne true
si le fichier existe.
Retourne l’extension du fichier.
Retourne le dossier courant.
Retourne le groupe du fichier ou false
en cas d’erreur.
Retourne l’info du fichier.
Retourne l’heure du dernier d’accès.
Retourne l’heure de la dernière modification ou false
en cas d’erreur.
Récupère la checksum MD5 du fichier avec vérification préalable de la taille
du fichier ou false
en cas d’erreur.
Retourne le nom du fichier sans l’extension.
Définit ou récupère l’offset pour le fichier ouvert.
Ouvre le fichier courant avec un $mode donné.
Retourne le propriétaire du fichier.
Retourne le « chmod » (permissions) du Fichier.
Prépare une chaîne de caractères ascii pour l’écriture. Convertit les fins de lignes en caractère correct pour la plateforme courante. Si c’est Windows « \r\n » sera utilisé, toutes les autres plateformes utiliseront « \n ».
Retourne un chemin complet du fichier.
Retourne les contenus du fichier en chaîne de caractères ou retourne
false
en cas d’échec.
Retourne true
si le fichier est lisible.
Sécurise le nom de fichier pour la sauvegarde.
Retourne la taille du fichier en octets.
Retourne true
si le fichier est ouvert en écriture.
Ecrit le $data donné dans le fichier.
Récupère le mimetype du fichier, retourne false
en cas d’échec.
Remplace le texte dans un fichier. Retourne false
en cas d’échec et
true
en cas de succès.