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

	...
}
Version: 4.0