DirectoryIterator ile php de dizin işlemleri bihayli basit.Çok kullanışlı DirectoryIterator nesnesini tanıyalım.Aslında bu yazıyı yazmamın sebebi eski php yazılarıdır.
The DirectoryIterator class’ı dizinimizdeki tüm dosya ve dizinlere kolayca ulaşmamızı sağlar.
DirectoryIterator
- public __construct ( string
$path
) // yeni bir DirectoryIterator nesnesi oluşturmak için dizin ismini ister. - public getExtension ( void ) : string // Dosyanın uzantısını getirir.
- public getFilename ( void ) : string // Dosya ismini getirir.
- public isDir ( void ) : bool // varolan dosya dizin mi diye kontrol eder.
- public isFile ( void ) : bool // varolan dosya bir dosya mı diye kontrol eder.
- public isReadable ( void ) : bool // okunabilirmi diye kontrol eder.
- public isWritable ( void ) : bool // yazılabilirmi diye kontrol eder.
Daha fazla detay için :
https://www.php.net/manual/en/class.directoryiterator.php
Küçük bir örnek ile pekiştirelim.
Örnek :
Senaryo : Varolan dizindeki tüm dizinleri ve o dizine bağlı alt dizinleri ve dosyaları listelemek istersek.
// VAROLAN DIZINI CONSTRUCTOR NESNESINE VER.
$directories = new DirectoryIterator(__DIR__);
foreach ($directories as $directory) {
// eğer dizin nokta ise devam et
if ($directory->isDot()) continue;
// Dizin ismini ekrana bas
echo $directory . PHP_EOL;
// EĞER DÖNGÜDEN GELEN DOSYA DIRECTORY İSE
if ($directory->isDir()) {
// O ALANDAKI TÜM DOSYALARI GETİR
$chilDirectories = new DirectoryIterator(__DIR__ . '/' . $directory);
// CHİLD DIRECTORYLERDE DÖN
foreach ($chilDirectories as $dir) {
if ($directory->isDot()) continue;
// EĞER DOSYA İSE
else if ($dir->isFile()) {
// DOSYANIN İSMİNİ , BOYUTUNU , DOSYA UZANTISINI YAZ
echo "--" . $dir->getFilename() . "--- Size : " . $dir->getSize() . ' Extension :' . $dir->getExtension() . PHP_EOL;
}
}
}
}
recursive versiyonundan bahsetmemişsin ama oda çok iş görüyor murat 🙂 Senin son örneğinde klasörün içinde bir klasör daha olsa sıkıntıya girer örneğin, o gibi durumlarda şöyle kullanılabilir;
$directory = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__), RecursiveIteratorIterator::SELF_FIRST);
foreach ($directory as $value){
echo $value . ”;
}