Nette Documentation Preview

syntax
Σύστημα αρχείων
***************

.[perex]
Η [api:Nette\Utils\FileSystem] είναι μια κλάση με χρήσιμες συναρτήσεις για εργασία με το σύστημα αρχείων. Ένα από τα πλεονεκτήματα σε σχέση με τις εγγενείς συναρτήσεις PHP είναι ότι σε περίπτωση σφάλματος ρίχνουν εξαιρέσεις.


Αν χρειάζεστε να αναζητήσετε αρχεία στο δίσκο, χρησιμοποιήστε το [Finder|finder].

Εγκατάσταση:

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

Τα ακόλουθα παραδείγματα προϋποθέτουν τη δημιουργία ενός ψευδώνυμου:

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


Χειρισμός
=========


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

Αντιγράφει ένα αρχείο ή ολόκληρο τον κατάλογο. Από προεπιλογή, αντικαθιστά τα υπάρχοντα αρχεία και καταλόγους. Με την παράμετρο `$overwrite` ρυθμισμένη στην τιμή `false`, ρίχνει μια εξαίρεση `Nette\InvalidStateException`, αν το αρχείο ή ο κατάλογος προορισμού `$target` υπάρχει. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση `Nette\IOException`.

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


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

Δημιουργεί τον κατάλογο αν δεν υπάρχει, συμπεριλαμβανομένων των γονικών καταλόγων. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση `Nette\IOException`.

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


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

Διαγράφει το αρχείο ή ολόκληρο τον κατάλογο αν υπάρχει. Αν ο κατάλογος δεν είναι κενός, διαγράφει πρώτα το περιεχόμενό του. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση `Nette\IOException`.

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


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

Ορίζει τα δικαιώματα του αρχείου σε `$fileMode` ή του καταλόγου σε `$dirMode`. Διασχίζει αναδρομικά και ορίζει δικαιώματα και για ολόκληρο το περιεχόμενο του καταλόγου.

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


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

Ανοίγει το αρχείο και επιστρέφει έναν πόρο. Η παράμετρος `$mode` λειτουργεί όπως και στην εγγενή συνάρτηση `fopen()`:https://www.php.net/manual/en/function.fopen.php. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση `Nette\IOException`.

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


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

Επιστρέφει το περιεχόμενο του αρχείου `$file`. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση `Nette\IOException`.

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


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

Διαβάζει το περιεχόμενο του αρχείου γραμμή προς γραμμή. Σε αντίθεση με την εγγενή συνάρτηση `file()`, δεν φορτώνει ολόκληρο το αρχείο στη μνήμη, αλλά το διαβάζει συνεχώς, έτσι είναι δυνατό να διαβαστούν και αρχεία μεγαλύτερα από τη διαθέσιμη μνήμη. Το `$stripNewLines` λέει αν πρέπει να αφαιρεθούν οι χαρακτήρες τέλους γραμμής `\r` και `\n`. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση `Nette\IOException`.

```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]
----------------------------------------------------------------------------

Μετονομάζει ή μετακινεί το αρχείο ή τον κατάλογο `$origin`. Από προεπιλογή, αντικαθιστά τα υπάρχοντα αρχεία και καταλόγους. Με την παράμετρο `$overwrite` ρυθμισμένη στην τιμή `false`, ρίχνει μια εξαίρεση `Nette\InvalidStateException`, αν το αρχείο ή ο κατάλογος προορισμού `$target` υπάρχει. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση `Nette\IOException`.

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


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

Γράφει το string `$content` στο αρχείο `$file`. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση `Nette\IOException`.

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


Διαδρομές
=========


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

Ελέγχει αν η διαδρομή `$path` είναι απόλυτη.

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


joinPaths(string ...$segments): string .[method]
------------------------------------------------
Ενώνει όλα τα τμήματα της διαδρομής και κανονικοποιεί το αποτέλεσμα.

```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]
---------------------------------------------
Κανονικοποιεί τα `..` και `.` και τους διαχωριστές καταλόγων στη διαδρομή σε συστημικούς.

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


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

Μετατρέπει τις κάθετους σε `/` που χρησιμοποιούνται στα συστήματα unix.

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


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

Μετατρέπει τις κάθετους σε χαρακτήρες ειδικούς για την τρέχουσα πλατφόρμα, δηλαδή `\` στα Windows και `/` αλλού.

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


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

Συνάγει την τελική διαδρομή από τη διαδρομή `$path` σε σχέση με τον βασικό κατάλογο `$basePath`. Αφήνει τις απόλυτες διαδρομές (`/foo`, `C:/foo`) αμετάβλητες (απλώς κανονικοποιεί τις κάθετους), συνδέει τις σχετικές διαδρομές στη βασική διαδρομή.

```php
// Na Windows by lomítka ve výstupu byla opačná (\) - Στα Windows, οι κάθετοι στην έξοδο θα ήταν αντίστροφες (\)
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'
```


Στατική έναντι μη στατικής πρόσβασης
====================================

Για να μπορείτε, για παράδειγμα, για σκοπούς δοκιμών, να αντικαταστήσετε εύκολα την κλάση με μια άλλη (mock), χρησιμοποιήστε την μη στατικά:

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

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

	...
}
```

Σύστημα αρχείων

Η Nette\Utils\FileSystem είναι μια κλάση με χρήσιμες συναρτήσεις για εργασία με το σύστημα αρχείων. Ένα από τα πλεονεκτήματα σε σχέση με τις εγγενείς συναρτήσεις PHP είναι ότι σε περίπτωση σφάλματος ρίχνουν εξαιρέσεις.

Αν χρειάζεστε να αναζητήσετε αρχεία στο δίσκο, χρησιμοποιήστε το Finder.

Εγκατάσταση:

composer require nette/utils

Τα ακόλουθα παραδείγματα προϋποθέτουν τη δημιουργία ενός ψευδώνυμου:

use Nette\Utils\FileSystem;

Χειρισμός

copy(string $origin, string $target, bool $overwrite=true)void

Αντιγράφει ένα αρχείο ή ολόκληρο τον κατάλογο. Από προεπιλογή, αντικαθιστά τα υπάρχοντα αρχεία και καταλόγους. Με την παράμετρο $overwrite ρυθμισμένη στην τιμή false, ρίχνει μια εξαίρεση Nette\InvalidStateException, αν το αρχείο ή ο κατάλογος προορισμού $target υπάρχει. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση Nette\IOException.

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

createDir(string $dir, int $mode=0777)void

Δημιουργεί τον κατάλογο αν δεν υπάρχει, συμπεριλαμβανομένων των γονικών καταλόγων. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση Nette\IOException.

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

delete(string $path): void

Διαγράφει το αρχείο ή ολόκληρο τον κατάλογο αν υπάρχει. Αν ο κατάλογος δεν είναι κενός, διαγράφει πρώτα το περιεχόμενό του. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση Nette\IOException.

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

makeWritable(string $path, int $dirMode=0777, int $fileMode=0666)void

Ορίζει τα δικαιώματα του αρχείου σε $fileMode ή του καταλόγου σε $dirMode. Διασχίζει αναδρομικά και ορίζει δικαιώματα και για ολόκληρο το περιεχόμενο του καταλόγου.

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

open(string $path, string $mode): resource

Ανοίγει το αρχείο και επιστρέφει έναν πόρο. Η παράμετρος $mode λειτουργεί όπως και στην εγγενή συνάρτηση fopen(). Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση Nette\IOException.

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

read(string $file): string

Επιστρέφει το περιεχόμενο του αρχείου $file. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση Nette\IOException.

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

readLines(string $file, bool $stripNewLines=true): \Generator

Διαβάζει το περιεχόμενο του αρχείου γραμμή προς γραμμή. Σε αντίθεση με την εγγενή συνάρτηση file(), δεν φορτώνει ολόκληρο το αρχείο στη μνήμη, αλλά το διαβάζει συνεχώς, έτσι είναι δυνατό να διαβαστούν και αρχεία μεγαλύτερα από τη διαθέσιμη μνήμη. Το $stripNewLines λέει αν πρέπει να αφαιρεθούν οι χαρακτήρες τέλους γραμμής \r και \n. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση Nette\IOException.

$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

Μετονομάζει ή μετακινεί το αρχείο ή τον κατάλογο $origin. Από προεπιλογή, αντικαθιστά τα υπάρχοντα αρχεία και καταλόγους. Με την παράμετρο $overwrite ρυθμισμένη στην τιμή false, ρίχνει μια εξαίρεση Nette\InvalidStateException, αν το αρχείο ή ο κατάλογος προορισμού $target υπάρχει. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση Nette\IOException.

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

write(string $file, string $content, int $mode=0666)void

Γράφει το string $content στο αρχείο $file. Σε περίπτωση σφάλματος, ρίχνει μια εξαίρεση Nette\IOException.

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

Διαδρομές

isAbsolute(string $path)bool

Ελέγχει αν η διαδρομή $path είναι απόλυτη.

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

joinPaths(string …$segments)string

Ενώνει όλα τα τμήματα της διαδρομής και κανονικοποιεί το αποτέλεσμα.

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

Κανονικοποιεί τα .. και . και τους διαχωριστές καταλόγων στη διαδρομή σε συστημικούς.

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

unixSlashes(string $path)string

Μετατρέπει τις κάθετους σε / που χρησιμοποιούνται στα συστήματα unix.

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

platformSlashes(string $path)string

Μετατρέπει τις κάθετους σε χαρακτήρες ειδικούς για την τρέχουσα πλατφόρμα, δηλαδή \ στα Windows και / αλλού.

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

resolvePath(string $basePath, string $path)string

Συνάγει την τελική διαδρομή από τη διαδρομή $path σε σχέση με τον βασικό κατάλογο $basePath. Αφήνει τις απόλυτες διαδρομές (/foo, C:/foo) αμετάβλητες (απλώς κανονικοποιεί τις κάθετους), συνδέει τις σχετικές διαδρομές στη βασική διαδρομή.

// Na Windows by lomítka ve výstupu byla opačná (\) - Στα Windows, οι κάθετοι στην έξοδο θα ήταν αντίστροφες (\)
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'

Στατική έναντι μη στατικής πρόσβασης

Για να μπορείτε, για παράδειγμα, για σκοπούς δοκιμών, να αντικαταστήσετε εύκολα την κλάση με μια άλλη (mock), χρησιμοποιήστε την μη στατικά:

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

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

	...
}