Dateisystem-Funktionen
Nette\Utils\FileSystem ist eine Klasse, die nützliche Funktionen für die Arbeit mit einem Dateisystem enthält. Ein Vorteil gegenüber nativen PHP-Funktionen ist, dass sie im Fehlerfall Ausnahmen auslösen.
Wenn Sie nach Dateien auf dem Datenträger suchen müssen, verwenden Sie den Finder.
Installation:
composer require nette/utils
Die folgenden Beispiele gehen davon aus, dass der folgende Klassenalias definiert ist:
use Nette\Utils\FileSystem;
Manipulation
copy(string $origin, string $target, bool $overwrite=true): void
Kopiert eine Datei oder ein ganzes Verzeichnis. Überschreibt standardmäßig vorhandene Dateien und Verzeichnisse. Wenn
$overwrite
auf false
gesetzt ist und ein $target
bereits existiert, wird eine Exception
Nette\InvalidStateException
geworfen. Löst eine Exception Nette\IOException
aus, wenn ein Fehler
auftritt.
FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);
createDir(string $directory, int $mode=0777): void
Erstellt ein Verzeichnis, wenn es nicht existiert, einschließlich übergeordneter Verzeichnisse. Wirft eine Exception
Nette\IOException
wenn ein Fehler auftritt.
FileSystem::createDir('/path/to/dir');
delete(string $path): void
Löscht eine Datei oder ein ganzes Verzeichnis, falls vorhanden. Wenn das Verzeichnis nicht leer ist, wird zuerst sein Inhalt
gelöscht. Wirft eine Exception Nette\IOException
wenn ein Fehler auftritt.
FileSystem::delete('/path/to/fileOrDir');
makeWritable(string $path, int $dirMode=0777, int $fileMode=0666): void
Setzt die Dateiberechtigungen auf $fileMode
oder die Verzeichnisberechtigungen auf $dirMode
.
Durchläuft rekursiv den gesamten Inhalt des Verzeichnisses und setzt die Berechtigungen auch für diesen.
FileSystem::makeWritable('/path/to/fileOrDir');
open(string $path, string $mode): resource
Öffnet die Datei und gibt die Ressource zurück. Der Parameter $mode
funktioniert genauso wie die native Funktion
fopen()
. Wenn ein Fehler auftritt, wird die Ausnahme
Nette\IOException
ausgelöst.
$res = FileSystem::open('/path/to/file', 'r');
read(string $file): string
Liest den Inhalt einer $file
. Bei Auftreten eines Fehlers wird die Ausnahme Nette\IOException
ausgelöst.
$content = FileSystem::read('/path/to/file');
readLines(string $file, bool $stripNewLines=true): \Generator
Liest den Inhalt der Datei Zeile für Zeile. Im Gegensatz zur nativen Funktion file()
wird nicht die gesamte Datei
in den Speicher eingelesen, sondern kontinuierlich, so dass auch Dateien gelesen werden können, die größer als der verfügbare
Speicher sind. Der Parameter $stripNewLines
gibt an, ob die Zeilenumbruchzeichen \r
und \n
entfernt werden sollen. Im Falle eines Fehlers löst sie eine Nette\IOException
Ausnahme aus.
$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
Benennt eine durch $origin
angegebene Datei oder ein Verzeichnis um oder verschiebt sie/es nach
$target
. Überschreibt standardmäßig vorhandene Dateien und Verzeichnisse. Wenn $overwrite
auf
false
gesetzt ist und $target
bereits existiert, wird eine Ausnahme
Nette\InvalidStateException
geworfen. Wirft eine Exception Nette\IOException
, wenn ein Fehler
auftritt.
FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);
write(string $file, string $content, int $mode=0666): void
Schreibt die $content
in eine $file
. Bei einem Fehler wird die Ausnahme
Nette\IOException
ausgelöst.
FileSystem::write('/path/to/file', $content);
Pfade
isAbsolute(string $path): bool
Bestimmt, ob die $path
absolut ist.
FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup'); // true
FileSystem::isAbsolute('C:/backup'); // true
joinPaths(string …$segments): string
Verbindet alle Segmente des Pfades und normalisiert das Ergebnis.
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
Normalisiert ..
und .
sowie die Verzeichnistrennzeichen im Pfad.
FileSystem::normalizePath('/file/.'); // '/file/'
FileSystem::normalizePath('\file\..'); // '/file'
FileSystem::normalizePath('/file/../..'); // '/..'
FileSystem::normalizePath('file/../../bar'); // '/../bar'
unixSlashes(string $path): string
Wandelt Schrägstriche in /
um, die auf Unix-Systemen verwendet werden.
$path = FileSystem::unixSlashes($path);
platformSlashes(string $path): string
Konvertiert Schrägstriche in Zeichen, die für die aktuelle Plattform spezifisch sind, d. h. \
unter Windows und
/
anderswo.
$path = FileSystem::platformSlashes($path);
Statischer vs. nicht-statischer Ansatz
Um die Klasse FileSystem
einfach durch eine andere Klasse zu ersetzen, z. B. zu Testzwecken, verwenden Sie sie
nicht-statisch:
class AnyClassUsingFileSystem
{
public function __construct(
private FileSystem $fileSystem,
) {
}
public function readConfig(): string
{
return $this->fileSystem->read(/* ... */);
}
...
}