PHP liste dizinleri ve kaldırmak .. ve

3 Cevap

Ben geçerli dizinde dizinleri listelemek bir senaryo yarattı

<?php
   $dir = getcwd(); 
   if($handle = opendir($dir)){
       while($file = readdir($handle)){
          if(is_dir($file)){
             echo "<a href=\"$file\">$file</a><br />";
            }
       }
?>

ama sorun bu ".." ve görüyorum, "dedi." Birisi tıkladığında sağ dizin listeleri üstünde, onlar dizinleri bir seviye yukarı yönlendirilmiş olsun .. Birisi nasıl bu ".." kaldırmak için bana ve olabilir "." ?

3 Cevap

Eğer opendir / readdir / closedir işlevlerini kullanırsanız, elle kontrol etmelisiniz:

<?php
if ($handle = opendir($dir)) {
    while ($file = readdir($handle)) {
      if ($file === '.' || $file === '..' || !is_dir($file)) continue;
      echo "<a href=\"$file\">$file</a><br />";
    }
}
?>

Eğer DirectoryIterator kullanmak istiyorsanız, isDot () metodu vardır:

<?php
$iterator = new DirectoryIterator($dir);
foreach ($iterator as $fileInfo) {
    if ($fileInfo->isDot() || !$fileInfo->isDir()) continue;
    $file = $fileinfo->getFilename();
    echo "<a href=\"$file\">$file</a><br />";
}
?>

Not: Ben bu girinti düzeyini azaltarak döngüler bu tür basitleştirmek devam düşünüyorum.

Tüm gizli ve "nokta dizinleri" atlar:

while($file = readdir($handle)){
    if (substr($file, 0, 1) == '.') {
        continue;
    }

Atlar dizinleri nokta:

while($file = readdir($handle)){
    if ($file == '.' || $file == '..') {
        continue;
    }

Veya kullanmak glob:

foreach(glob('/path/*.*') as $file) {
    printf('<a href="%s">%s</a><br/>', $file, $file);
}

Dosyalarınızı filename dot extension desen, kullanımı takip etmiyorsanız

array_filter(glob('/path/*'), 'is_file')

bir dizisini almak için (non-gizli) Sadece dosya isimleri.