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