Dateisystem
Nette\Utils\FileSystem ist eine Klasse, die nützliche Funktionen für die Arbeit mit dem Dateisystem bereitstellt. Ein Vorteil gegenüber nativen PHP-Funktionen ist, dass sie im Fehlerfall Ausnahmen auslösen.
Wenn Sie nach Dateien auf der Festplatte suchen müssen, verwenden Sie den Finder.
Installation:
composer require nette/utils
Die folgenden Beispiele setzen voraus, dass der folgende Alias definiert wurde:
use Nette\Utils\FileSystem;
Manipulation
copy (string $origin, string $target, bool $overwrite=true): void
Kopiert eine Datei oder ein ganzes Verzeichnis. Standardmäßig werden vorhandene Dateien und Verzeichnisse überschrieben.
Wenn der Parameter $overwrite auf false gesetzt ist und die Zieldatei oder das Zielverzeichnis
$target bereits existiert, wird eine Nette\InvalidStateException ausgelöst. Bei anderen Fehlern wird
eine Nette\IOException ausgelöst.
FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);
createDir (string $dir, int $mode=0777): void
Erstellt ein Verzeichnis $dir, falls es nicht existiert, einschließlich aller übergeordneten Verzeichnisse. Bei
einem Fehler wird eine Nette\IOException ausgelöst.
FileSystem::createDir('/path/to/dir');
delete (string $path): void
Löscht eine Datei oder ein ganzes Verzeichnis $path, falls vorhanden. Wenn das Verzeichnis nicht leer ist, wird
zuerst sein Inhalt gelöscht. Bei einem Fehler wird eine Nette\IOException ausgelöst.
FileSystem::delete('/path/to/fileOrDir');
makeWritable (string $path, int $dirMode=0777, int $fileMode=0666): void
Setzt die Berechtigungen für eine Datei auf $fileMode oder für ein Verzeichnis auf $dirMode.
Durchläuft rekursiv den Pfad $path und setzt die Berechtigungen auch für den gesamten Inhalt des
Verzeichnisses.
FileSystem::makeWritable('/path/to/fileOrDir');
open (string $path, string $mode): resource
Öffnet eine Datei $path und gibt eine Ressource zurück. Der Parameter $mode funktioniert genauso
wie bei der nativen Funktion fopen(). Bei einem Fehler
wird eine Nette\IOException ausgelöst.
$res = FileSystem::open('/path/to/file', 'r');
read (string $file): string
Gibt den Inhalt der Datei $file zurück. Bei einem Fehler wird eine Nette\IOException ausgelöst.
$content = FileSystem::read('/path/to/file');
readLines (string $file, bool $stripNewLines=true): \Generator
Liest den Inhalt der Datei $file Zeile für Zeile. Im Gegensatz zur nativen Funktion file() wird
nicht die gesamte Datei in den Speicher geladen, sondern sie wird fortlaufend gelesen, sodass auch Dateien gelesen werden können,
die größer als der verfügbare Speicher sind. $stripNewLines gibt an, ob die Zeilenendezeichen \r und
\n entfernt werden sollen (true standardmäßig). Bei einem Fehler wird eine
Nette\IOException ausgelöst.
$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 Datei oder ein Verzeichnis $origin in $target um oder verschiebt es. Standardmäßig
werden vorhandene Dateien und Verzeichnisse überschrieben. Wenn der Parameter $overwrite auf false
gesetzt ist und die Zieldatei oder das Zielverzeichnis $target bereits existiert, wird eine
Nette\InvalidStateException ausgelöst. Bei anderen Fehlern wird eine Nette\IOException ausgelöst.
FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);
write (string $file, string $content, int $mode=0666): void
Schreibt den String $content in die Datei $file. Setzt optional die Berechtigungen
$mode. Bei einem Fehler wird eine Nette\IOException ausgelöst.
FileSystem::write('/path/to/file', $content);
Pfade
isAbsolute (string $path): bool
Prüft, ob der Pfad $path absolut ist.
FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup'); // true
FileSystem::isAbsolute('C:/backup'); // true
joinPaths (string …$segments): string
Verbindet alle Pfadsegmente 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 Verzeichnistrennzeichen im Pfad auf die systemüblichen.
FileSystem::normalizePath('/file/.'); // '/file/'
FileSystem::normalizePath('\file\..'); // '/file'
FileSystem::normalizePath('/file/../..'); // '/..'
FileSystem::normalizePath('file/../../bar'); // '/../bar'
unixSlashes (string $path): string
Konvertiert Schrägstriche in /, die in Unix-Systemen verwendet werden.
$path = FileSystem::unixSlashes($path);
platformSlashes (string $path): string
Konvertiert Schrägstriche in die für die aktuelle Plattform spezifischen Zeichen, d.h. \ unter Windows und
/ anderswo.
$path = FileSystem::platformSlashes($path);
resolvePath (string $basePath, string $path): string
Löst den Pfad $path relativ zum Basisverzeichnis $basePath auf und gibt den endgültigen Pfad
zurück. Absolute Pfade (/foo, C:/foo) bleiben unverändert (nur Schrägstriche werden normalisiert),
relative Pfade werden an den Basispfad angehängt.
// Unter Windows wären die Schrägstriche in der Ausgabe umgekehrt (\)
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'
Statischer vs. nicht-statischer Zugriff
Um die Klasse beispielsweise zu Testzwecken einfach durch eine andere (einen Mock) ersetzen zu können, verwenden Sie sie nicht-statisch:
class AnyClassUsingFileSystem
{
public function __construct(
private FileSystem $fileSystem,
) {
}
public function readConfig(): string
{
return $this->fileSystem->read(/* ... */);
}
...
}