PHP nasıl dosyaları aracılığıyla alt dizinleri ve döngü okumak?

6 Cevap php

Ben alt dizinleri tüm dosyaları aracılığıyla bir döngü oluşturmak gerekir. Bana benim gibi bu kod yapısına bir yardım edebilir:

$main = "MainDirectory";
loop through sub-directories {
    loop through filels in each sub-directory {
        do something with each file
    }
};

Eğer plz, yardımcı olabilir misiniz?

6 Cevap

RecursiveDirectoryIterator RecursiveIteratorIterator ile birlikte kullanın.

$di = new RecursiveDirectoryIterator('path/to/directory');
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
    echo $filename . ' - ' . $file->getSize() . ' bytes <br/>';
}

Muhtemelen, bunun için bir özyinelemeli işlevi kullanmak istediğiniz durumda senin alt dizinleri alt-alt dizinleri var

$main = "MainDirectory";

function readDirs($main){
  $dirHandle = opendir($main);
  while($file = readdir($dirHandle){
    if(is_dir($main . $file) && $file != '.' && $file != '..'){
       readDirs($file);
    }
    else{
      //do stuff
    }
  } 
}

kodunu test etmedi, ama bu ne istediğinizi yakın olmalıdır.

Haydi, ilk kendiniz deneyin! ;)

Nelere ihtiyacınız olacak:

scandir()
is_dir

ve tabii ki foreach

http://de.php.net/manual/de/function.is-dir.php

http://de3.php.net/manual/de/function.scandir.php

I glob bu joker var olan sevdiğim:

foreach (glob("*/*.txt") as $filename) {
    echo "$filename\n";
}

Details and more complex scenarios.

Ama Sen karmaşık bir klasör yapısını varsa RecursiveDirectoryIterator çözüm kesin olduğunu.

Sen özyineli çağrıya yolunu eklemeniz gerekir.

function readDirs($path){
  $dirHandle = opendir($path);
  while($item = readdir($dirHandle)) {
    $newPath = $path."/".$item;
    if(is_dir($newPath) && $item != '.' && $item != '..') {
       echo "Found Folder $newPath<br>";
       readDirs($newPath);
    }
    else{
      echo '&nbsp;&nbsp;Found File or .-dir '.$item.'<br>';
    }
  }
}

$path =  "/";
echo "$path<br>";

readDirs($path);

Another solution alt dizinleri ve alt dosyaların (doğru klasöradı set) ile okumak için:

<?php
$path = realpath('samplefolder/yorfolder');
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
{
        echo "$filename <br/>";
}
?>