Système de fichiers

Nette\Utils\FileSystem est une classe contenant des fonctions utiles pour travailler avec le système de fichiers. L'un des avantages par rapport aux fonctions natives de PHP est qu'elles lèvent des exceptions en cas d'erreur.

Si vous avez besoin de rechercher des fichiers sur le disque, utilisez Finder.

Installation :

composer require nette/utils

Les exemples suivants supposent qu'un alias a été créé :

use Nette\Utils\FileSystem;

Manipulation

copy (string $origin, string $target, bool $overwrite=true)void

Copie un fichier ou un répertoire entier. Par défaut, écrase les fichiers et répertoires existants. Si le paramètre $overwrite est défini sur false, une exception Nette\InvalidStateException est levée si le fichier ou le répertoire cible $target existe. En cas d'erreur, une exception Nette\IOException est levée.

FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);

createDir (string $dir, int $mode=0777)void

Crée un répertoire s'il n'existe pas, y compris les répertoires parents. En cas d'erreur, une exception Nette\IOException est levée.

FileSystem::createDir('/path/to/dir');

delete (string $path): void

Supprime un fichier ou un répertoire entier s'il existe. Si le répertoire n'est pas vide, son contenu est d'abord supprimé. En cas d'erreur, une exception Nette\IOException est levée.

FileSystem::delete('/path/to/fileOrDir');

makeWritable (string $path, int $dirMode=0777, int $fileMode=0666)void

Définit les permissions du fichier sur $fileMode ou du répertoire sur $dirMode. Parcourt récursivement et définit également les permissions pour tout le contenu du répertoire.

FileSystem::makeWritable('/path/to/fileOrDir');

open (string $path, string $mode): resource

Ouvre un fichier et retourne une ressource. Le paramètre $mode fonctionne de la même manière que la fonction native fopen(). En cas d'erreur, une exception Nette\IOException est levée.

$res = FileSystem::open('/path/to/file', 'r');

read (string $file): string

Retourne le contenu du fichier $file. En cas d'erreur, une exception Nette\IOException est levée.

$content = FileSystem::read('/path/to/file');

readLines (string $file, bool $stripNewLines=true): \Generator

Lit le contenu du fichier ligne par ligne. Contrairement à la fonction native file(), elle ne charge pas tout le fichier en mémoire, mais le lit progressivement, ce qui permet de lire des fichiers plus volumineux que la mémoire disponible. $stripNewLines indique si les caractères de fin de ligne \r et \n doivent être supprimés. En cas d'erreur, une exception Nette\IOException est levée.

$lines = FileSystem::readLines('/path/to/file');

foreach ($lines as $lineNum => $line) {
	echo "Line $lineNum: $line\n";
}

rename (string $origin, string $target, bool $overwrite=true)void

Renomme ou déplace un fichier ou un répertoire $origin. Par défaut, écrase les fichiers et répertoires existants. Si le paramètre $overwrite est défini sur false, une exception Nette\InvalidStateException est levée si le fichier ou le répertoire cible $target existe. En cas d'erreur, une exception Nette\IOException est levée.

FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);

write (string $file, string $content, int $mode=0666)void

Écrit la chaîne $content dans le fichier $file. En cas d'erreur, une exception Nette\IOException est levée.

FileSystem::write('/path/to/file', $content);

Chemins

isAbsolute (string $path)bool

Vérifie si le chemin $path est absolu.

FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup');   // true
FileSystem::isAbsolute('C:/backup'); // true

joinPaths (string …$segments)string

Joint tous les segments du chemin et normalise le résultat.

FileSystem::joinPaths('a', 'b', 'file.txt'); // 'a/b/file.txt'
FileSystem::joinPaths('/a/', '/b/');         // '/a/b/'
FileSystem::joinPaths('/a/', '/../b');       // '/b'

normalizePath (string $path)string

Normalise .. et . ainsi que les séparateurs de répertoires dans le chemin vers les séparateurs système.

FileSystem::normalizePath('/file/.');        // '/file/'
FileSystem::normalizePath('\file\..');       // '/file'
FileSystem::normalizePath('/file/../..');    // '/..'
FileSystem::normalizePath('file/../../bar'); // '/../bar'

unixSlashes (string $path)string

Convertit les barres obliques en / utilisés dans les systèmes Unix.

$path = FileSystem::unixSlashes($path);

platformSlashes (string $path)string

Convertit les barres obliques en caractères spécifiques à la plateforme actuelle, c'est-à-dire \ sous Windows et / ailleurs.

$path = FileSystem::platformSlashes($path);

resolvePath (string $basePath, string $path)string

Déduit le chemin final à partir du chemin $path par rapport au répertoire de base $basePath. Les chemins absolus (/foo, C:/foo) sont laissés inchangés (seuls les slashes sont normalisés), les chemins relatifs sont ajoutés au chemin de base.

// Sous Windows, les slashes dans la sortie seraient inversés (\)
FileSystem::resolvePath('/base/dir', '/abs/path');      // '/abs/path'
FileSystem::resolvePath('/base/dir', 'rel');            // '/base/dir/rel'
FileSystem::resolvePath('base/dir', '../file.txt');     // 'base/file.txt'
FileSystem::resolvePath('base', '');                    // 'base'

Accès statique vs non statique

Afin de pouvoir facilement remplacer la classe par une autre (un mock) à des fins de test, par exemple, utilisez-la de manière non statique :

class AnyClassUsingFileSystem
{
	public function __construct(
		private FileSystem $fileSystem,
	) {
	}

	public function readConfig(): string
	{
		return $this->fileSystem->read(/* ... */);
	}

	...
}
version: 4.0