Dosya Sistemi İşlevleri
Nette\Utils\FileSystem bir dosya sistemi ile çalışmak için yararlı işlevler içeren bir sınıftır. Yerel PHP işlevlerine göre bir avantajı, hata durumunda istisnalar atmasıdır.
Diskte dosya aramanız gerekiyorsa Finder'ı kullanın.
Kurulum:
composer require nette/utils
Aşağıdaki örneklerde, aşağıdaki sınıf takma adının tanımlandığı varsayılmaktadır:
use Nette\Utils\FileSystem;
Manipülasyon
copy (string $origin, string $target, bool $overwrite=true): void
Bir dosyayı veya tüm dizini kopyalar. Varsayılan olarak mevcut dosya ve dizinlerin üzerine yazar. $overwrite
öğesi false
olarak ayarlanmışsa ve bir $target
zaten mevcutsa, bir
Nette\InvalidStateException
istisnası atar. Hata oluştuğunda Nette\IOException
istisnası atar.
FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);
createDir (string $directory, int $mode=0777): void
Üst dizinler de dahil olmak üzere, mevcut değilse bir dizin oluşturur. Hata oluştuğunda Nette\IOException
şeklinde bir istisna atar.
FileSystem::createDir('/path/to/dir');
delete (string $path): void
Bir dosyayı veya varsa bir dizinin tamamını siler. Dizin boş değilse, önce içeriğini siler. Hata oluştuğunda
Nette\IOException
şeklinde bir istisna atar.
FileSystem::delete('/path/to/fileOrDir');
makeWritable (string $path, int $dirMode=0777, int $fileMode=0666): void
Dosya izinlerini $fileMode
veya dizin izinlerini $dirMode
olarak ayarlar. Özyinelemeli olarak
dizinin tüm içeriğini dolaşır ve izinleri de ayarlar.
FileSystem::makeWritable('/path/to/fileOrDir');
open (string $path, string $mode): resource
Dosya açar ve kaynak döndürür. $mode
parametresi, yerel fopen()
işleviyle aynı şekilde çalışır. Bir hata
oluşursa, Nette\IOException
istisnasını yükseltir.
$res = FileSystem::open('/path/to/file', 'r');
read (string $file): string
Bir $file
içeriğini okur. Hata oluştuğunda Nette\IOException
istisnası atar.
$content = FileSystem::read('/path/to/file');
readLines (string $file, bool $stripNewLines=true): \Generator
Dosya içeriğini satır satır okur. Yerel file()
işlevinden farklı olarak, dosyanın tamamını belleğe
okumaz, ancak mevcut bellekten daha büyük dosyaların okunabilmesi için sürekli olarak okur. $stripNewLines
,
\r
ve \n
satır sonu karakterlerinin çıkarılıp çıkarılmayacağını belirtir. Hata durumunda, bir
Nette\IOException
istisnası yükseltir.
$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
tarafından belirtilen bir dosyayı veya dizini $target
adresine yeniden adlandırır veya
taşır. Varsayılan olarak mevcut dosya ve dizinlerin üzerine yazar. $overwrite
öğesi false
olarak
ayarlanmışsa ve $target
zaten mevcutsa, bir Nette\InvalidStateException
istisnası atar. Hata
oluştuğunda Nette\IOException
istisnası atar.
FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);
write (string $file, string $content, int $mode=0666): void
$content
adresini bir $file
adresine yazar. Hata oluştuğunda bir Nette\IOException
istisnası atar.
FileSystem::write('/path/to/file', $content);
Yollar
isAbsolute (string $path): bool
$path
adresinin mutlak olup olmadığını belirler.
FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup'); // true
FileSystem::isAbsolute('C:/backup'); // true
joinPaths (string …$segments): string
Yolun tüm segmentlerini birleştirir ve sonucu normalleştirir.
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
..
ve .
adreslerini ve yol içindeki dizin ayırıcılarını normalleştirir.
FileSystem::normalizePath('/file/.'); // '/file/'
FileSystem::normalizePath('\file\..'); // '/file'
FileSystem::normalizePath('/file/../..'); // '/..'
FileSystem::normalizePath('file/../../bar'); // '/../bar'
unixSlashes (string $path): string
Eğik çizgileri Unix sistemlerinde kullanılan /
adresine dönüştürür.
$path = FileSystem::unixSlashes($path);
platformSlashes (string $path): string
Eğik çizgileri geçerli platforma özgü karakterlere dönüştürür, yani Windows'ta \
ve başka yerlerde
/
.
$path = FileSystem::platformSlashes($path);
Statik ve Statik Olmayan Yaklaşım
Örneğin test amacıyla FileSystem
sınıfını başka bir sınıfla kolayca değiştirmek için, bunu statik
olmayan bir şekilde kullanın:
class AnyClassUsingFileSystem
{
public function __construct(
private FileSystem $fileSystem,
) {
}
public function readConfig(): string
{
return $this->fileSystem->read(/* ... */);
}
...
}