Przeglądarka 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');

?>

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