Datotečni sistem
Nette\Utils\FileSystem je razred z uporabnimi funkcijami za delo z datotečnim sistemom. Ena od prednosti v primerjavi z izvornimi PHP funkcijami je, da v primeru napake sprožijo izjeme.
Če potrebujete iskati datoteke na disku, uporabite Finder.
Namestitev:
composer require nette/utils
Naslednji primeri predpostavljajo ustvarjen vzdevek:
use Nette\Utils\FileSystem;
Manipulacija
copy(string $origin, string $target, bool $overwrite=true): void
Kopira datoteko ali celoten imenik. Privzeto prepiše obstoječe datoteke in imenike. S parametrom $overwrite,
nastavljenim na vrednost false, sproži izjemo Nette\InvalidStateException, če ciljna datoteka ali
imenik $target obstaja. Ob napaki sproži izjemo Nette\IOException.
FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);
createDir(string $dir, int $mode=0777): void
Ustvari imenik, če ne obstaja, vključno z nadrejenimi imeniki. Ob napaki sproži izjemo Nette\IOException.
FileSystem::createDir('/path/to/dir');
delete(string $path): void
Izbriše datoteko ali celoten imenik, če obstaja. Če imenik ni prazen, najprej izbriše njegovo vsebino. Ob napaki sproži
izjemo Nette\IOException.
FileSystem::delete('/path/to/fileOrDir');
makeWritable(string $path, int $dirMode=0777, int $fileMode=0666): void
Nastavi dovoljenja datoteke na $fileMode ali imenika na $dirMode. Rekurzivno preide in nastavi
dovoljenja tudi celotni vsebini imenika.
FileSystem::makeWritable('/path/to/fileOrDir');
open(string $path, string $mode): resource
Odpre datoteko in vrne vir (resource). Parameter $mode deluje enako kot pri izvorni funkciji fopen(). V primeru napake sproži izjemo
Nette\IOException.
$res = FileSystem::open('/path/to/file', 'r');
read(string $file): string
Vrne vsebino datoteke $file. Ob napaki sproži izjemo Nette\IOException.
$content = FileSystem::read('/path/to/file');
readLines(string $file, bool $stripNewLines=true): \Generator
Prebere vsebino datoteke vrstico po vrstico. Za razliko od izvorne funkcije file() ne naloži celotne datoteke
v pomnilnik, ampak jo bere sproti, tako da je mogoče brati tudi datoteke, večje od razpoložljivega pomnilnika.
$stripNewLines pove, ali naj se odstranijo znaki konca vrstice \r in \n. V primeru napake
sproži izjemo 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
Preimenuje ali premakne datoteko ali imenik $origin. Privzeto prepiše obstoječe datoteke in imenike.
S parametrom $overwrite, nastavljenim na vrednost false, sproži izjemo
Nette\InvalidStateException, če ciljna datoteka ali imenik $target obstaja. Ob napaki sproži izjemo
Nette\IOException.
FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);
write(string $file, string $content, int $mode=0666): void
Zapiše niz $content v datoteko $file. Ob napaki sproži izjemo Nette\IOException.
FileSystem::write('/path/to/file', $content);
Poti
isAbsolute(string $path): bool
Ugotavlja, ali je pot $path absolutna.
FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup'); // true
FileSystem::isAbsolute('C:/backup'); // true
joinPaths(string …$segments): string
Združi vse segmente poti in rezultat normalizira.
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
Normalizira .. in . ter ločila imenikov v poti na sistemska.
FileSystem::normalizePath('/file/.'); // '/file/'
FileSystem::normalizePath('\file\..'); // '/file'
FileSystem::normalizePath('/file/../..'); // '/..'
FileSystem::normalizePath('file/../../bar'); // '/../bar'
unixSlashes(string $path): string
Pretvori poševnice v /, ki se uporabljajo v sistemih Unix.
$path = FileSystem::unixSlashes($path);
platformSlashes(string $path): string
Pretvori poševnice v znake, specifične za trenutno platformo, tj. \ v Windows in / drugje.
$path = FileSystem::platformSlashes($path);
resolvePath(string $basePath, string $path): string
Izpelje končno pot iz poti $path glede na osnovni imenik $basePath. Absolutne poti
(/foo, C:/foo) pusti nespremenjene (samo normalizira poševnice), relativne poti pripne
k osnovni poti.
// V Windows bi bile poševnice v izpisu obrnjene (\)
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'
Statični vs nestatični pristop
Da bi lahko na primer za namene testiranja razred enostavno nadomestili z drugim (mock), ga uporabljajte nestatično:
class AnyClassUsingFileSystem
{
public function __construct(
private FileSystem $fileSystem,
) {
}
public function readConfig(): string
{
return $this->fileSystem->read(/* ... */);
}
...
}