Nette Documentation Preview

syntax
Dateisystem
***********

.[perex]
[api: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 |finder].

Installation:

```shell
composer require nette/utils
```

Die folgenden Beispiele setzen voraus, dass der folgende Alias definiert wurde:

```php
use Nette\Utils\FileSystem;
```


Manipulation
============


copy(string $origin, string $target, bool $overwrite=true): void .[method]
--------------------------------------------------------------------------

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.

```php
FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);
```


createDir(string $dir, int $mode=0777): void .[method]
------------------------------------------------------

Erstellt ein Verzeichnis `$dir`, falls es nicht existiert, einschließlich aller übergeordneten Verzeichnisse. Bei einem Fehler wird eine `Nette\IOException` ausgelöst.

```php
FileSystem::createDir('/path/to/dir');
```


delete(string $path): void .[method]
------------------------------------

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.

```php
FileSystem::delete('/path/to/fileOrDir');
```


makeWritable(string $path, int $dirMode=0777, int $fileMode=0666): void .[method]
---------------------------------------------------------------------------------

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.

```php
FileSystem::makeWritable('/path/to/fileOrDir');
```


open(string $path, string $mode): resource .[method]
----------------------------------------------------

Öffnet eine Datei `$path` und gibt eine Ressource zurück. Der Parameter `$mode` funktioniert genauso wie bei der nativen Funktion [`fopen()` |https://www.php.net/manual/en/function.fopen.php]. Bei einem Fehler wird eine `Nette\IOException` ausgelöst.

```php
$res = FileSystem::open('/path/to/file', 'r');
```


read(string $file): string .[method]
------------------------------------

Gibt den Inhalt der Datei `$file` zurück. Bei einem Fehler wird eine `Nette\IOException` ausgelöst.

```php
$content = FileSystem::read('/path/to/file');
```


readLines(string $file, bool $stripNewLines=true): \Generator .[method]
-----------------------------------------------------------------------

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.

```php
$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 .[method]
----------------------------------------------------------------------------

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.

```php
FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);
```


write(string $file, string $content, int $mode=0666): void .[method]
--------------------------------------------------------------------

Schreibt den String `$content` in die Datei `$file`. Setzt optional die Berechtigungen `$mode`. Bei einem Fehler wird eine `Nette\IOException` ausgelöst.

```php
FileSystem::write('/path/to/file', $content);
```


Pfade
=====


isAbsolute(string $path): bool .[method]
----------------------------------------

Prüft, ob der Pfad `$path` absolut ist.

```php
FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup');   // true
FileSystem::isAbsolute('C:/backup'); // true
```


joinPaths(string ...$segments): string .[method]
------------------------------------------------
Verbindet alle Pfadsegmente und normalisiert das Ergebnis.

```php
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 .[method]
---------------------------------------------
Normalisiert `..` und `.` sowie Verzeichnistrennzeichen im Pfad auf die systemüblichen.

```php
FileSystem::normalizePath('/file/.');        // '/file/'
FileSystem::normalizePath('\file\..');       // '/file'
FileSystem::normalizePath('/file/../..');    // '/..'
FileSystem::normalizePath('file/../../bar'); // '/../bar'
```


unixSlashes(string $path): string .[method]
-------------------------------------------

Konvertiert Schrägstriche in `/`, die in Unix-Systemen verwendet werden.

```php
$path = FileSystem::unixSlashes($path);
```


platformSlashes(string $path): string .[method]
-----------------------------------------------

Konvertiert Schrägstriche in die für die aktuelle Plattform spezifischen Zeichen, d.h. `\` unter Windows und `/` anderswo.

```php
$path = FileSystem::platformSlashes($path);
```


resolvePath(string $basePath, string $path): string .[method]{data-version:4.0.6}
---------------------------------------------------------------------------------

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.

```php
// 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:

```php
class AnyClassUsingFileSystem
{
	public function __construct(
		private FileSystem $fileSystem,
	) {
	}

	public function readConfig(): string
	{
		return $this->fileSystem->read(/* ... */);
	}

	...
}
```

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

	...
}