Fonctions du système de fichiers

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

Si vous devez rechercher des fichiers sur le disque, utilisez le Finder.

Installation :

composer require nette/utils

Les exemples suivants supposent que l'alias de classe suivant est défini :

use Nette\Utils\FileSystem;

Manipulation

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

Copie un fichier ou un répertoire entier. Ecrase les fichiers et répertoires existants par défaut. Si $overwrite a pour valeur false et qu'un $target existe déjà, lance une exception Nette\InvalidStateException. Lance une exception Nette\IOException en cas d'erreur.

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

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

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

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, il supprime son contenu en premier. Lance une exception Nette\IOException en cas d'erreur.

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

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

Définit les permissions des fichiers à $fileMode ou les permissions des répertoires à $dirMode. Parcourt récursivement et définit également les autorisations sur l'ensemble du contenu du répertoire.

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

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

Ouvre le fichier et retourne la ressource. Le paramètre $mode fonctionne de la même manière que la fonction native fopen(). Si une erreur se produit, elle soulève l'exception Nette\IOException.

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

read(string $file): string

Lit le contenu d'un fichier $file. Lance une exception Nette\IOException si une erreur se produit.

$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 lit pas le fichier entier en mémoire, mais le lit de manière continue, de sorte que les fichiers plus grands que la mémoire disponible peuvent être lus. Le paramètre $stripNewLines indique s'il faut supprimer les caractères de saut de ligne \r et \n. En cas d'erreur, elle lève une exception Nette\IOException.

$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 spécifié par $origin vers $target. Ecrase les fichiers et répertoires existants par défaut. Si $overwrite a pour valeur false et que $target existe déjà, lance une exception Nette\InvalidStateException. Lance une exception Nette\IOException en cas d'erreur.

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

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

Écrit l'adresse $content dans un fichier $file. Lance une exception Nette\IOException si une erreur se produit.

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

Chemins d'accès

isAbsolute(string $path)bool

Détermine si le site $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 . et les séparateurs de répertoire dans le chemin.

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ées sur les systèmes Unix.

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

platformSlashes(string $path)string

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

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

Approche statique ou non statique

Pour remplacer facilement la classe FileSystem par une autre classe, par exemple à des fins de test, 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