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

	...
}
Version: 4.0