Dateisystem
Nette\Utils\FileSystem ist eine Klasse mit nützlichen Funktionen für die Arbeit mit dem Dateisystem. Ein Vorteil gegenüber nativen PHP-Funktionen ist, dass sie im Fehlerfall Ausnahmen werfen.
Wenn Sie nach Dateien auf der Festplatte suchen müssen, verwenden Sie Finder.
Installation:
composer require nette/utils
Die folgenden Beispiele setzen voraus, dass ein Alias erstellt 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. Mit
dem Parameter $overwrite
auf den Wert false
gesetzt, wird eine Ausnahme
Nette\InvalidStateException
geworfen, wenn die Zieldatei oder das Zielverzeichnis $target
existiert. Bei
einem Fehler wird eine Ausnahme Nette\IOException
geworfen.
FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);
createDir (string $dir, int $mode=0777): void
Erstellt ein Verzeichnis, wenn es nicht existiert, einschließlich übergeordneter Verzeichnisse. Bei einem Fehler wird eine
Ausnahme Nette\IOException
geworfen.
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. Bei einem Fehler wird eine Ausnahme Nette\IOException
geworfen.
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 und setzt Berechtigungen auch für den gesamten Inhalt des Verzeichnisses.
FileSystem::makeWritable('/path/to/fileOrDir');
open (string $path, string $mode): resource
Öffnet eine Datei und gibt eine Ressource zurück. Der Parameter $mode
funktioniert genauso wie bei der nativen
Funktion fopen()
. Bei einem Fehler wird eine Ausnahme
Nette\IOException
geworfen.
$res = FileSystem::open('/path/to/file', 'r');
read (string $file): string
Gibt den Inhalt der Datei $file
zurück. Bei einem Fehler wird eine Ausnahme Nette\IOException
geworfen.
$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()
lädt es nicht die gesamte
Datei in den Speicher, sondern liest sie fortlaufend, 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. Bei einem Fehler wird eine Ausnahme Nette\IOException
geworfen.
$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
um oder verschiebt es. Standardmäßig werden vorhandene Dateien
und Verzeichnisse überschrieben. Mit dem Parameter $overwrite
auf den Wert false
gesetzt, wird eine
Ausnahme Nette\InvalidStateException
geworfen, wenn die Zieldatei oder das Zielverzeichnis $target
existiert. Bei einem Fehler wird eine Ausnahme Nette\IOException
geworfen.
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
. Bei einem Fehler wird eine Ausnahme
Nette\IOException
geworfen.
FileSystem::write('/path/to/file', $content);
Pfade
isAbsolute (string $path): bool
Stellt fest, 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
Leitet den endgültigen Pfad vom Pfad $path
relativ zum Basisverzeichnis $basePath
ab. 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 beispielsweise zu Testzwecken die Klasse einfach durch eine andere ersetzen zu können (Mock), verwenden Sie sie nicht-statisch:
class AnyClassUsingFileSystem
{
public function __construct(
private FileSystem $fileSystem,
) {
}
public function readConfig(): string
{
return $this->fileSystem->read(/* ... */);
}
...
}