(Moodle) Directory dosyaların PHP alın listesi

5 Cevap php

Ben bir dizin açın ve içindeki tüm dosyaları okumak ve şimdiye kadar var, bir array içine onları koymak istiyorum:

$imagesdir = $CFG->dataroot.'/1/themeimages/';

Hangi bana dizin yolunu, nedir sonraki adım verir?

5 Cevap

Lütfen etiket listeden ben Moodleın kullandığınız varsayalım beri, sadece kullanabilirsiniz:

function get_directory_list($rootdir, $excludefiles='', $descend=true, $getdirs=false, $getfiles=true)

Bu fonksiyon içerdiği moodlelib.php.

Doc okuma:

  • Returns an array with all the filenames in * all subdirectories, relative to the given rootdir.

İsteğe bağlı parametreler hakkında daha fazla bilgi için resmi dokümana bakınız.

Dosyaların içeriğini okumak için Fonksiyonları filelib.php de mevcuttur.

Çözeltisi kullanmak olacaktır opendir + readdir + closedir (quoting an example from the first page),

$imagesdir = $CFG->dataroot.'/1/themeimages/';
if ($handle = opendir($imagesdir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}


Another solution would be to use the [DirectoryIterator class ; quoting the example from]4 the __construct page :

$imagesdir = $CFG->dataroot.'/1/themeimages/';
$dir = new DirectoryIterator($imagesdir);
foreach ($dir as $fileinfo) {
    if (!$fileinfo->isDot()) {
        var_dump($fileinfo->getFilename());
    }
}


Of course, in each case, instead of just echoing or dumping the name of the file, you'd have to put it into an array.

Bu döngü önce dizi başlatılıyor anlamına gelecektir:

$list_files = array();

Ve döngü içinde, seçtiğiniz çözümü bağlı olarak, bu iki çizgi biri gibi bir şey kullanabilirsiniz:

$list_files[] = $file;
$list_files[] = $fileinfo->getFilename();

Sadece kullanımı işlevi yerleşik scandir:

Dizinden dosyaları ve dizinleri bir dizi döndürür.

Yani bu gibi kullanabilirsiniz:

$array = scandir($imagesdir);

Tabii ki çok DirectoryIterator kullanabilirsiniz, ama bu çok daha basit olduğunu.

Ayrıca nokta dosyaları şerit olabilir:

$array = array_diff(scandir($imagesdir), array('.', '..'));

Daha OO yaklaşım DirectoryIterator sınıfını kullanın.

$images = array();
$imagesdir = $CFG->dataroot.'/1/themeimages/';
foreach (new DirectoryIterator($imagesdir) as $file) {
   if($file->isDot()) continue;
   $images[] = $file;
}

daha sonra da bir filtre ihtiyacınız varsa burada kısa çözüm:

$imagesdir = $CFG->dataroot.'/1/themeimages/*.*';
foreach (glob($imagesdir) as $file)
  array_push($files,$file);

php otomatik hariç . ve ..

you can also specify your own mask if you don't need ALL files, as shown in above *.* php also automatically creates the $files array for you.

son satırı da olabilir:

$files[]=$file;