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

Η κλάση 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(/* ... */);
	}

	...
}
έκδοση: 4.0