Σύστημα αρχείων
Η κλάση 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(/* ... */);
}
...
}