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