Programowanie w języku PHP » FAQ

Wyświetlenie listy plików i katalogów w PHP

Poniższy kod źródłowy korzysta z algorytmu rekurencji</wiki>. Szczegółowy opis algorytmu znajduje się w dziale Algorytmy. Poniższy skrypt umożliwia wyświetlenie wszystkich katalogów i plików znajdujących się w danej ścieżce. Uwaga!. Na Linuxie miałem pewne problemy z działaniem skryptu - otóż funkcja PHP is_dir() zwracała false nawet wówczas, gdy podany w parametrze URL był rzeczywiście folderem. Nie wiem więc jak to będzie działało na systemach z Windows.

<?
 
//  Adam Boduch
//  [email protected]
//  http://4programmers.net
 
  $i = 0;
 
  /* tablica zawiera kod HTML, ktory wyswietli odpowiednia ikone oznaczajaca katalog lub plik */
  $images['file'] = '<img src="templates/subMain/gfx/doc.gif"> ';
  $images['dir'] = '<img align="center" src="templates/subMain/gfx/folder.gif"> ';
 
  function show_dir($directory)
  {
      global $i, $images;
 
      $dir = opendir($directory);
      while ( $file = readdir($dir) )
      {
          if ( $file != '.' && $file != '..' )
          {
              if ( is_dir($directory.'/'.$file) )
              {
                  echo ( str_repeat(' ', $i * 2) . $images['dir'] . $file . '<br>' );
                    ++$i;
                  show_dir($directory . '/' . $file);
              }
              else
              {
                  echo ( str_repeat(' ', $i * 4) . $images['file'] . $file . '<br>' );
              }
          }
      }
      closedir($dir);
      --$i;
  }
 
  show_dir('/home/www/coyote/coyote');
 
?>

2 komentarze

mucha87 2007-05-07 21:51

"Na Linuxie miałem pewne problemy z działaniem skryptu - otóż funkcja PHP is_dir() zwracała false nawet wówczas, gdy podany w parametrze URL był rzeczywiście folderem."
Ponieważ nie bierzesz pod uwagę możliwości, że plik(folder) może znajdować się w podkatalogu, tu jest moim zdaniem błąd, jest:
if ( is_dir($file) ) ,a powinno być:
if ( is_dir($directory .'/'.$file) )