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"; // Γραμμή $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]
--------------------------------------------------------------------

Γράφει τη συμβολοσειρά `$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
// Στα 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"; // Γραμμή $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

Γράφει τη συμβολοσειρά $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) αμετάβλητες (απλώς κανονικοποιεί τις κάθετους) και συνδέει τις σχετικές διαδρομές στη βασική διαδρομή.

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

	...
}