Sistemul de fișiere

Nette\Utils\FileSystem este o clasă cu funcții utile pentru lucrul cu sistemul de fișiere. Unul dintre avantaje față de funcțiile native PHP este că aruncă excepții în caz de eroare.

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

Instalare:

composer require nette/utils

Următoarele exemple presupun crearea unui alias:

use Nette\Utils\FileSystem;

Manipulare

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

Copiază un fișier sau un întreg director. În mod implicit, suprascrie fișierele și directoarele existente. Cu parametrul $overwrite setat la valoarea false, aruncă excepția Nette\InvalidStateException dacă fișierul sau directorul țintă $target există. În caz de eroare, aruncă excepția Nette\IOException.

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

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

Creează un director dacă nu există, inclusiv directoarele părinte. În caz de eroare, aruncă excepția Nette\IOException.

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

delete (string $path): void

Șterge un fișier sau un întreg director dacă există. Dacă directorul nu este gol, șterge mai întâi conținutul său. În caz de eroare, aruncă excepția Nette\IOException.

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

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

Setează permisiunile fișierului la $fileMode sau directorului la $dirMode. Parcurge recursiv și setează permisiunile și pentru întregul conținut al directorului.

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

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

Deschide un fișier și returnează resursa. Parametrul $mode funcționează la fel ca la funcția nativă fopen(). În caz de eroare, aruncă excepția Nette\IOException.

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

read (string $file): string

Returnează conținutul fișierului $file. În caz de eroare, aruncă excepția Nette\IOException.

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

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

Citește conținutul fișierului rând cu rând. Spre deosebire de funcția nativă file(), nu încarcă întregul fișier în memorie, ci îl citește continuu, astfel încât este posibil să citiți și fișiere mai mari decât memoria disponibilă. $stripNewLines indică dacă trebuie eliminate caracterele de sfârșit de rând \r și \n. În caz de eroare, aruncă excepția 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ă fișierul sau directorul $origin. În mod implicit, suprascrie fișierele și directoarele existente. Cu parametrul $overwrite setat la valoarea false, aruncă excepția Nette\InvalidStateException dacă fișierul sau directorul țintă $target există. În caz de eroare, aruncă excepția Nette\IOException.

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

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

Scrie șirul $content în fișierul $file. În caz de eroare, aruncă excepția Nette\IOException.

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

Căi

isAbsolute (string $path)bool

Verifică dacă calea $path este absolută.

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

joinPaths (string …$segments)string

Unește toate segmentele căii ș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 separatoarele de directoare în cale la cele de sistem.

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

unixSlashes (string $path)string

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

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

platformSlashes (string $path)string

Convertește slash-urile la caracterele specifice platformei curente, adică \ în Windows și / în altă parte.

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

resolvePath (string $basePath, string $path)string

Derivează calea finală din calea $path relativ la directorul de bază $basePath. Căile absolute (/foo, C:/foo) le lasă neschimbate (doar normalizează slash-urile), căile relative le anexează la calea de bază.

// Pe Windows, slash-urile din ieșire ar fi inverse (\)
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'

Acces static vs nestatic

Pentru a putea înlocui ușor clasa cu alta (mock) în scopuri de testare, de exemplu, utilizați-o nestatic:

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

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

	...
}
versiune: 4.0