Funcțiile sistemului de fișiere

Nette\Utils\FileSystem este o clasă care conține funcții utile pentru lucrul cu un sistem de fișiere. Un avantaj față de funcțiile native PHP este că acestea aruncă excepții în caz de erori.

Dacă trebuie să căutați fișiere pe disc, utilizați Finder.

Instalare:

composer require nette/utils

Următoarele exemple presupun că este definit următorul alias de clasă:

use Nette\Utils\FileSystem;

Manipulare

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

Copiază un fișier sau un întreg director. Suprascrie în mod implicit fișierele și directoarele existente. Dacă $overwrite este setat la false și există deja un $target, se aruncă o excepție Nette\InvalidStateException. Lansează o excepție Nette\IOException în cazul în care apare o eroare.

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

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

Creează un director dacă acesta nu există, inclusiv directoarele părinte. Lansează o excepție Nette\IOException în cazul în care apare o eroare.

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

delete(string $path): void

Șterge un fișier sau un întreg director, dacă există. În cazul în care directorul nu este gol, șterge mai întâi conținutul acestuia. Aruncă o excepție Nette\IOException în cazul în care apare o eroare.

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

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

Stabilește permisiunile fișierelor la $fileMode sau permisiunile directoarelor la $dirMode. Traversează și stabilește în mod recursiv permisiunile pentru întregul conținut al directorului.

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

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

Deschide fișierul și returnează resursa. Parametrul $mode funcționează la fel ca funcția nativă fopen(). În cazul în care apare o eroare, se ridică excepția Nette\IOException.

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

read(string $file): string

Citește conținutul unui fișier $file. Aruncă o excepție Nette\IOException în cazul în care apare o eroare.

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

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

Citește conținutul fișierului linie cu linie. Spre deosebire de funcția nativă file(), aceasta nu citește întregul fișier în memorie, ci îl citește continuu, astfel încât să poată fi citite fișiere mai mari decât memoria disponibilă. $stripNewLines specifică dacă se elimină sau nu caracterele de întrerupere a liniei \r și \n. În caz de eroare, se ridică o excepție 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

Redenumește sau mută un fișier sau un director specificat de $origin în $target. Suprascrie în mod implicit fișierele și directoarele existente. Dacă $overwrite este setat la false și $target există deja, se aruncă o excepție Nette\InvalidStateException. Lansează o excepție Nette\IOException în cazul în care apare o eroare.

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

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

Scrie $content pe un fișier $file. Aruncă o excepție Nette\IOException în caz de eroare.

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

Căi de acces

isAbsolute(string $path)bool

Determină dacă $path este absolut.

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

joinPaths(string …$segments)string

Unește toate segmentele traseului și normalizează rezultatul.

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

Normalizează .. și . și separatorii de directoare din calea de acces.

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

unixSlashes(string $path)string

Convertește slash-urile în / utilizate pe sistemele Unix.

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

platformSlashes(string $path)string

Convertește slash-urile în caractere specifice platformei curente, de exemplu \ pe Windows și / în alte sisteme.

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

Abordare statică vs. non-statică

Pentru a înlocui cu ușurință clasa FileSystem cu o altă clasă, de exemplu în scopuri de testare, utilizați-o în mod non-static:

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


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

	...
}
versiune: 4.0