This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release!

Folder & File

Les utilitaires Folder et File sont des classes pratiques pour aider à la lecture, l’écriture/l’ajout de fichiers; Lister les fichiers d’un dossier et autres tâches habituelles liées aux répertoires.

Utilisation basique

Assurez vous que les classes sont chargées en utilisant App::uses():

<?php
App::uses('Folder', 'Utility');
App::uses('File', 'Utility');

Ensuite nous pouvons configurer une nouvelle instance de dossier:

<?php
$dir = new Folder('/path/to/folder');

et chercher tous les fichiers .ctp à l’intérieur de ce dossier en utilisant les regex:

<?php
$files = $dir->find('.*\.ctp');

Maintenant nous pouvons faire une boucle sur les fichiers et les lire, écrire/ajouter aux contenus, ou simplement supprimer le fichier:

<?php
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
}

API de Folder

class Folder(string $path = false, boolean $create = false, mixed $mode = false)
<?php
// Crée un nouveau dossier avec les permissions à 0755
$dir = new Folder('/path/to/folder', true, 0755);
property Folder::$path

Le chemin pour le dossier courant. Folder::pwd() retournera la même information.

property Folder::$sort

Dit si la liste des résultats doit être oui ou non rangée par name.

property Folder::$mode

Mode à utiliser pour la création de dossiers. par défaut à 0755. Ne fait rien sur les machines Windows.

static Folder::addPathElement(string $path, string $element)
Type renvoyé:

string

Retourne $path avec $element ajouté, avec le bon slash entre-deux:

$path = Folder::addPathElement('/a/path/for', 'testing');
// $path égal /a/path/for/testing

$element peut aussi être un tableau:

$path = Folder::addPathElement('/a/path/for', array('testing', 'another'));
// $path égal à /a/path/for/testing/another

Nouveau dans la version 2.5: Le paramètre $element accepte un tableau depuis 2.5

Folder::cd(string $path)
Type renvoyé:

string

Change le répertoire en $path. Retourne false si échec:

<?php
$folder = new Folder('/foo');
echo $folder->path; // Affiche /foo
$folder->cd('/bar');
echo $folder->path; // Affiche /bar
$false = $folder->cd('/non-existent-folder');
Folder::chmod(string $path, integer $mode = false, boolean $recursive = true, array $exceptions = array())
Type renvoyé:

boolean

Change le mode sur la structure de répertoire de façon récursive. Ceci inclut aussi le changement du mode des fichiers:

<?php
$dir = new Folder();
$dir->chmod('/path/to/folder', 0755, true, array('skip_me.php'));
Folder::copy(array|string $options = array())
Type renvoyé:

boolean

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:

<?php
$folder1 = new Folder('/path/to/folder1');
$folder1->copy('/path/to/folder2');
// Va mettre folder1 et tous son contenu dans folder2

$folder = new Folder('/path/to/folder');
$folder->copy(array(
    'to' => '/path/to/new/folder',
    'from' => '/path/to/copy/from', // va entraîner l'execution de cd()
    'mode' => 0755,
    'skip' => array('skip-me.php', '.git'),
    'scheme' => Folder::SKIP, // Passe les répertoires/fichiers qui existent déjà.
    'recursive' => true
));

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 la répertoire cible avec ceux dans le répertoire source. Si les deux source et 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.

Modifié dans la version 2.3: La fusion, l’évitement et la surcharge des schémas ont été ajoutés à copy().

static Folder::correctSlashFor($path)
Type renvoyé:

string

Retourne un ensemble correct de slashes pour un $path donné. (”\” pour les chemins Windows et “/” pour les autres chemins).

Folder::create(string $pathname, integer $mode = false)
Type renvoyé:

boolean

Crée une structure de répertoire de façon récursive. Peut être utilisé pour créer des structures de chemin profond comme /foo/bar/baz/shoe/horn:

<?php
$folder = new Folder();
if ($folder->create('foo' . DS . 'bar' . DS . 'baz' . DS . 'shoe' . DS . 'horn')) {
    // Successfully created the nested folders
}
Folder::delete(string $path = null)
Type renvoyé:

boolean

Efface de façon récursive les répertoires si le système le permet:

<?php
$folder = new Folder('foo');
if ($folder->delete()) {
    // Successfully deleted foo and its nested folders
}
Folder::dirsize()
Type renvoyé:

integer

Retourne la taille en bytes de ce Dossier et ses contenus.

Folder::errors()
Type renvoyé:

array

Récupère l’erreur de la dernière méthode.

Folder::find(string $regexpPattern = '.*', boolean $sort = false)
Type renvoyé:

array

Retourne un tableau de tous les fichiers correspondants dans le répertoire courant:

<?php
// Trouve tous les .png dans votre dossier app/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().

Folder::findRecursive(string $pattern = '.*', boolean $sort = false)
Type renvoyé:

array

Retourne un tableau de tous les fichiers correspondants dans et en-dessous du répertoire courant:

<?php
// 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/app/webroot/index.php
    [1] => /var/www/cake/app/webroot/test.php
    [2] => /var/www/cake/app/webroot/img/test-skip-icon.png
    [3] => /var/www/cake/app/webroot/img/test-fail-icon.png
    [4] => /var/www/cake/app/webroot/img/test-error-icon.png
    [5] => /var/www/cake/app/webroot/img/test-pass-icon.png
)
*/
Folder::inCakePath(string $path = '')
Type renvoyé:

boolean

Retourne true si le Fichier est dans un CakePath donné.

Folder::inPath(string $path = '', boolean $reverse = false)
Type renvoyé:

boolean

Retourne true si le Fichier est dans le chemin donné:

<?php
$Folder = new Folder(WWW_ROOT);
$result = $Folder->inPath(APP);
// $result = true, /var/www/example/app/ is in /var/www/example/app/webroot/

$result = $Folder->inPath(WWW_ROOT . 'img' . DS, true);
// $result = true, /var/www/example/app/webroot/ est dans /var/www/example/app/webroot/img/
static Folder::isAbsolute(string $path)
Type renvoyé:

boolean

Retourne true si le $path donné est un chemin absolu.

static Folder::isSlashTerm(string $path)
Type renvoyé:

boolean

Retourne true si le $path donné finit par un slash (par exemple. se termine-par-un-slash):

<?php
$result = Folder::isSlashTerm('/my/test/path');
// $result = false
$result = Folder::isSlashTerm('/my/test/path/');
// $result = true
static Folder::isWindowsPath(string $path)
Type renvoyé:

boolean

Retourne true si le $path donné est un chemin Windows.

Folder::messages()
Type renvoyé:

array

Récupère les messages de la dernière méthode.

Folder::move(array $options)
Type renvoyé:

boolean

Déplace le répertoire de façon récursive.

static Folder::normalizePath(string $path)
Type renvoyé:

string

Retourne un ensemble correct de slashes pour un $path donné. (”\” pour les chemins Windows et “/” pour les autres chemins.)

Folder::pwd()
Type renvoyé:

string

Retourne le chemin courant.

Folder::read(boolean $sort = true, array|boolean $exceptions = false, boolean $fullPath = false)
Type renvoyé:

mixed

Paramètres:
  • $sort (boolean) – Si à true, triera les résultats.

  • $exceptions (mixed) – Un tableau de noms de fichiers et de dossiers à ignorer. Si à true ou “.” cette méthode va ignorer les fichiers cachés ou les fichiers commençant par “.”.

  • $fullPath (boolean) – Si à true, va retourner les résultats en utilisant des chemins absolus.

Retourne un tableau du contenu du répertoire courant. Le tableau retourné contient deux sous-tableaux: Un des repertoires et un des fichiers:

<?php
$dir = new Folder(WWW_ROOT);
$files = $dir->read(true, array('files', 'index.php'));
/*
Array
(
    [0] => Array // dossiers
        (
            [0] => css
            [1] => img
            [2] => js
        )
    [1] => Array // fichiers
        (
            [0] => .htaccess
            [1] => favicon.ico
            [2] => test.php
        )
)
*/
Folder::realpath(string $path)
Type renvoyé:

string

Récupère le vrai chemin (taking « .. » and such into account).

static Folder::slashTerm(string $path)
Type renvoyé:

string

Retourne $path avec le slash ajouté à la fin (corrigé pour Windows ou d’autres OS).

Folder::tree(null|string $path = null, array|boolean $exceptions = true, null|string $type = null)
Type renvoyé:

mixed

Retourne un tableau de répertoires imbriqués et de fichiers dans chaque répertoire.

L’API de File

class File(string $path, boolean $create = false, integer $mode = 755)
<?php
// Crée un nouveau fichier avec les permissions à 0644
$file = new File('/path/to/file.php', true, 0644);
property File::$Folder

L’objet Folder du fichier.

property File::$name

Le nom du fichier avec l’extension. Différe de File::name() qui retourne le nom sans l’extension.

property File::$info

Un tableau du fichier info. Utilisez File::info() à la place.

property File::$handle

Maintient le fichier de gestion des ressources si le fichier est ouvert.

property File::$lock

Active le blocage du fichier en lecture et écriture.

property File::$path

Le chemin absolu du fichier courant.

File::append(string $data, boolean $force = false)
Type renvoyé:

boolean

Ajoute la chaîne de caractères donnée au fichier courant.

File::close()
Type renvoyé:

boolean

Ferme le fichier courant si il est ouvert.

File::copy(string $dest, boolean $overwrite = true)
Type renvoyé:

boolean

Copie le Fichier vers $dest.

File::create()
Type renvoyé:

boolean

Crée le Fichier.

File::delete()
Type renvoyé:

boolean

Supprime le Fichier.

File::executable()
Type renvoyé:

boolean

Retourne true si le Fichier est executable.

File::exists()
Type renvoyé:

boolean

Retourne true si le Fichier existe.

File::ext()
Type renvoyé:

string

Retourne l’extension du Fichier.

File::Folder()
Type renvoyé:

Folder

Retourne le dossier courant.

File::group()
Type renvoyé:

integer|false

Retourne le groupe du Fichier.

File::info()
Type renvoyé:

array

Retourne l’info du Fichier.

Modifié dans la version 2.1: File::info() inclut maintenant les informations filesize & mimetype.

File::lastAccess()
Type renvoyé:

integer|false

Retourne le dernier temps d’accès.

File::lastChange()
Type renvoyé:

integer|false

Retourne le dernier temps modifié.

File::md5(integer|boolean $maxsize = 5)
Type renvoyé:

string

Récupère la MD5 Checksum du fichier avec la vérification précédente du Filesize.

File::name()
Type renvoyé:

string

Retourne le nom du Fichier sans l’extension.

File::offset(integer|boolean $offset = false, integer $seek = 0)
Type renvoyé:

mixed

Définit ou récupère l’offset pour le fichier ouvert.

File::open(string $mode = 'r', boolean $force = false)
Type renvoyé:

boolean

Ouvre le fichier courant avec un $mode donné.

File::owner()
Type renvoyé:

integer

Retourne le propriétaire du Fichier.

File::perms()
Type renvoyé:

string

Retourne le « chmod » (permissions) du Fichier.

static File::prepare(string $data, boolean $forceWindows = false)
Type renvoyé:

string

Prépare une chaîne de caractères ascii pour l’écriture. Convertit les lignes de fin en un terminator correct pour la plateforme courante. Si c’est Windows « rn » sera utilisé, toutes les autres plateformes utiliseront « n »

File::pwd()
Type renvoyé:

string

Retourne un chemin complet du Fichier.

File::read(string $bytes = false, string $mode = 'rb', boolean $force = false)
Type renvoyé:

string|boolean

Retourne les contenus du Fichier en chaîne de caractère ou retourne false en cas d’échec.

File::readable()
Type renvoyé:

boolean

Retourne true si le Fichier est lisible.

File::safe(string $name = null, string $ext = null)
Type renvoyé:

string

Rend le nom de fichier bon pour la sauvegarde.

File::size()
Type renvoyé:

integer

Retourne le Filesize.

File::writable()
Type renvoyé:

boolean

Retourne si le Fichier est ouvert en écriture.

File::write(string $data, string $mode = 'w', boolean$force = false)
Type renvoyé:

boolean

Ecrit le $data donné dans le Fichier.

Nouveau dans la version 2.1: File::mime().

File::mime()
Type renvoyé:

mixed

Récupère le mimetype du Fichier, retourne false en cas d’échec.

File::replaceText($search, $replace)
Type renvoyé:

boolean

Remplace le texte dans un fichier. Retourne false en cas d’échec et true en cas de succès.

Nouveau dans la version 2.5: File::replaceText()