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(/* ... */);
}
...
}