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
// adam@boduch.net
// 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');
?>
"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) )
PS: http://4programmers.net/PHP/FAQ/Lista_plików_z_katalogu