Dosya Sistemi Fonksiyonları

Nette\Utils\FileSystem, dosya sistemiyle çalışmaya yarayan kullanışlı fonksiyonlar içeren bir sınıftır. Yerleşik PHP fonksiyonlarına göre bir üstünlüğü, hata durumunda istisna fırlatmalarıdır.

Diskte dosya aramanız gerekiyorsa Finder kullanın.

Kurulum:

composer require nette/utils

Aşağıdaki örnekler, şu sınıf takma adının tanımlandığını varsayar:

use Nette\Utils\FileSystem;

İşlemler

copy (string $origin, string $target, bool $overwrite=true)void

Bir dosyayı ya da tüm bir dizini kopyalar. Varsayılan olarak var olan dosyaların ve dizinlerin üzerine yazar. $overwrite false yapılmışsa ve hedef dosya ya da dizin $target zaten varsa, Nette\InvalidStateException fırlatır. Hata durumunda Nette\IOException fırlatır.

FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);

createDir (string $dir, int $mode=0777)void

Dizin yoksa, üst dizinleriyle birlikte oluşturur. Hata durumunda Nette\IOException fırlatır.

FileSystem::createDir('/path/to/dir');

delete (string $path): void

Varsa bir dosyayı ya da tüm bir dizini siler. Dizin boş değilse önce içeriğini siler. Hata durumunda Nette\IOException fırlatır.

FileSystem::delete('/path/to/fileOrDir');

makeWritable (string $path, int $dirMode=0777, int $fileMode=0666)void

Dosya izinlerini $fileMode, dizin izinlerini $dirMode olarak ayarlar. Dizinin tüm içeriğini de özyinelemeli olarak dolaşıp izinleri ayarlar.

FileSystem::makeWritable('/path/to/fileOrDir');

open (string $path, string $mode): resource

Bir dosyayı açar ve bir resource tanıtıcısı döndürür. $mode parametresi yerleşik fopen() fonksiyonundakiyle aynı şekilde çalışır. Hata durumunda Nette\IOException fırlatır.

$res = FileSystem::open('/path/to/file', 'r');

read (string $file): string

$file dosyasının içeriğini okur. Hata durumunda Nette\IOException fırlatır.

$content = FileSystem::read('/path/to/file');

readLines (string $file, bool $stripNewLines=true): \Generator

Dosya içeriğini satır satır okur. Yerleşik file() fonksiyonunun aksine dosyanın tamamını belleğe yüklemez, sürekli okur; böylece kullanılabilir bellekten büyük dosyaları da okuyabilirsiniz. $stripNewLines, satır sonu karakterleri \r ve \n'in kaldırılıp kaldırılmayacağını belirler. Hata durumunda Nette\IOException fırlatır.

$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 ile belirtilen dosya ya da dizini $target olarak yeniden adlandırır veya taşır. Varsayılan olarak var olan dosyaların ve dizinlerin üzerine yazar. $overwrite false yapılmışsa ve hedef dosya ya da dizin $target zaten varsa, Nette\InvalidStateException fırlatır. Hata durumunda Nette\IOException fırlatır.

FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);

write (string $file, string $content, ?int $mode=0666)void

$content dizesini $file dosyasına yazar. Üst dizin yoksa otomatik olarak oluşturulur. Varsayılan olarak dosya izinlerini de ayarlar; chmod çağrısını atlamak için $mode olarak null verin. Hata durumunda Nette\IOException fırlatır.

FileSystem::write('/path/to/file', $content);

writeAtomic (string $file, string $content, ?int $mode=0666)void

$content dizesini $file dosyasına atomik olarak yazar: içerik önce geçici bir dosyaya yazılır, ardından bu dosya hedefin yerini tek adımda alır. Böylece aynı anda dosyaya erişen bir okuyucu onu asla yarım yazılmış ya da kesilmiş göremez. Bunun dışında tam olarak write() gibi davranır. Hata durumunda Nette\IOException fırlatır.

FileSystem::writeAtomic('/path/to/file', $content);

Yollar

isAbsolute (string $path)bool

$path yolunun mutlak olup olmadığını belirler.

FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup');   // true
FileSystem::isAbsolute('C:/backup'); // true

isValidFilename (string $name)bool

$name değerinin, yol bilgisi içermeyen ve platformlar arası geçerli bir dosya adı olup olmadığını denetler. Boş dizeleri, . ve .. değerlerini, denetim karakterlerini, <>:"|?*\/ karakterlerini, nokta ya da boşlukla biten adları ve Windows'un ayrılmış adlarını (CON, NUL, COM1, …) reddeder.

FileSystem::isValidFilename('photo.jpg');    // true
FileSystem::isValidFilename('../photo.jpg'); // false
FileSystem::isValidFilename('CON');          // false

joinPaths (string …$segments)string

Tüm yol parçalarını 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

Yoldaki .., . ve dizin ayırıcılarını sistemin standardına göre normalleştirir.

FileSystem::normalizePath('/file/.');        // '/file'
FileSystem::normalizePath('\file\..');       // '/'
FileSystem::normalizePath('/file/../..');    // '/..'
FileSystem::normalizePath('file/../../bar'); // '../bar'

unixSlashes (string $path)string

Eğik çizgileri Unix sistemlerinde kullanılan / biçimine dönüştürür.

$path = FileSystem::unixSlashes($path);

platformSlashes (string $path)string

Eğik çizgileri geçerli platforma özgü karakterlere, yani Windows'ta \, diğer sistemlerde / biçimine dönüştürür.

$path = FileSystem::platformSlashes($path);

resolvePath (string $basePath, string $path)string

$path yolunu $basePath temel dizinine göre çözerek nihai yolu verir. Mutlak yollar (/foo, C:/foo) değişmeden kalır (yalnızca eğik çizgiler normalleştirilir), göreli yollar temel yola eklenir.

// Windows'ta çıktıdaki eğik çizgiler ters yönde olurdu (\)
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'

Statik mi, Statik Olmayan mı?

Sınıfı test amacıyla kolayca başka bir sınıfla (örneğin bir mock'la) değiştirebilmek için statik olmayan biçimde kullanın:

class AnyClassUsingFileSystem
{
	public function __construct(
		private FileSystem $fileSystem,
	) {
	}

	public function readConfig(): string
	{
		return $this->fileSystem->read(/* ... */);
	}

	// ...
}
versiyon: 4.x