Λειτουργίες συστήματος αρχείων
Nette\Utils\FileSystem είναι μια κλάση, η οποία περιέχει χρήσιμες λειτουργίες για την εργασία με ένα σύστημα αρχείων. Ένα πλεονέκτημα σε σχέση με τις εγγενείς συναρτήσεις της PHP είναι ότι σε περίπτωση σφαλμάτων πετάνε εξαιρέσεις.
Αν θέλετε να αναζητήσετε αρχεία στο δίσκο, χρησιμοποιήστε το Finder.
Εγκατάσταση:
composer require nette/utils
Τα ακόλουθα παραδείγματα υποθέτουν ότι έχει οριστεί το ακόλουθο ψευδώνυμο κλάσης:
use Nette\Utils\FileSystem;
Manipulation
copy(string $origin, string $target, bool $overwrite=true): void
Αντιγράφει ένα αρχείο ή έναν ολόκληρο κατάλογο. Αντικαθιστά τα
υπάρχοντα αρχεία και καταλόγους από προεπιλογή. Εάν το $overwrite
έχει οριστεί σε false
και ένα $target
υπάρχει ήδη, δημιουργεί
μια εξαίρεση Nette\InvalidStateException
. Πετάει μια εξαίρεση
Nette\IOException
σε περίπτωση σφάλματος.
FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);
createDir(string $directory, 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
στο $target
. Αντικαθιστά τα υπάρχοντα αρχεία και
καταλόγους από προεπιλογή. Εάν το $overwrite
έχει οριστεί σε
false
και το $target
υπάρχει ήδη, προκαλεί εξαίρεση
Nette\InvalidStateException
. Πετάει εξαίρεση 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);
Στατική έναντι μη στατικής προσέγγισης
Για να αντικαταστήσετε εύκολα την κλάση FileSystem
με μια άλλη
κλάση, για παράδειγμα για σκοπούς δοκιμών, χρησιμοποιήστε τη μη
στατική:
class AnyClassUsingFileSystem
{
public function __construct(
private FileSystem $fileSystem,
) {
}
public function readConfig(): string
{
return $this->fileSystem->read(/* ... */);
}
...
}