PHP FAQ

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

Adam Boduch

Poniższy kod źródłowy korzysta z algorytmu <wiki href="rekurencja">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');
 
?>
FAQ

2 komentarzy

"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) )