Nasıl bir fonksiyon birden fazla dizin üzerinden bir dosyayı bulmak için?

1 Cevap

Birden fazla dizin üzerinden bir dosya aramak için PHP bir "ölçülebilir" bir yolu var mı?

Ben dosya arama yollarının birinde olabilir biliyorum diyelim:

$ PathOne, $ pathTwo, $ pathThree. Ama şimdi kullanıcı (çerçeve kullanır geliştirici) yanı sıra alt klasörlerde grubuna yaptığı şeyler yapabiliyor, hayal sağlar. $ PathTwo 20 alt klasörler içeren ve her alt klasör 2 daha fazla alt klasörler içerir.

Nasıl bir $ dosya için tüm bu yollar artı alt klasörler arasında arama yapabilir? (Ama klasörleri aşağı aramadan) aşırı böyle bir şey yapmak için file_exists () işlevini kullanarak bazı çerçeveler gördüm. Muhtemelen orada hangi klasörleri anlamaya, ve sonra onlara adım için bir yol gerekir?

1 Cevap

Sen SPL kütüphaneden bir RecursiveDirectoryIterator kullanabilirsiniz:

$dir_iterator = new RecursiveDirectoryIterator("/path");
$iterator = new RecursiveIteratorIterator($dir_iterator,
                    RecursiveIteratorIterator::SELF_FIRST);

foreach ($iterator as $file) {
    echo $file, "\n";
}

Yukarıdaki kod tüm alt dizinleri dahil belirttiğiniz dizindeki tüm dosyaların bir listesini yazdırmak olacaktır. Bu gibi, aradığınız dosyayı bulmak için dosya eşleme mantığını gerçekleştirmek için biraz foreach() döngü değiştirebilir:

$dir_iterator = new RecursiveDirectoryIterator("/path");
$iterator = new RecursiveIteratorIterator($dir_iterator,
                    RecursiveIteratorIterator::SELF_FIRST);

foreach ($iterator as $splFile) {
    if ($splFile->getBaseName() == $file) {
        echo "Found it";
        //do stuff
        break;
    }
}

Tüm dosyaları ve dizinleri kendinizi anlamaya sahip bir sürü iş kaydeder.