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(/* ... */);
	}

	...
}
versiyon: 4.0