2009-07-04 1 views
1

Я попытался написать сценарий, чтобы перечислить все файлы в каталогах и подкаталогах и т. Д. Скрипт отлично работает, если я не включу проверку, чтобы увидеть, являются ли какие-либо файлы каталогами. Код не генерирует ошибок, но он генерирует сто строк текста, которые говорят «Список каталогов». вместо того, что я ожидал. Любая идея, почему это не работает?Ошибка в листинге каталога PHP

<?php 

//define the path as relative 
$path = "./"; 

function listagain($pth) 
{ 
//using the opendir function 
$dir_handle = @opendir($pth) or die("Unable to open $pth"); 

echo "Directory Listing of $pth<br/>"; 

//running the while loop 
while ($file = readdir($dir_handle)) 
{ 
    //check whether file is directory 
    if(is_dir($file)) 
    { 
     //if it is, generate it's list of files 
     listagain($file); 
    } 
    else 
    { 
     if($file!="." && $file!="..") 
     echo "<a href='$file'>$file</a><br/>"; 
    } 
} 
//closing the directory 
closedir($dir_handle); 
} 

listagain($path) 

?> 

ответ

4

Первые вопросы . и .. относятся к текущей и родительской директориям. Таким образом, вы получаете бесконечную рекурсию.

Вы должны сначала проверить, что перед проверкой типа файла:

if ($file!="." && $file!="..") { 
    if (is_dir($file)) { 
     listagain($file); 
    } else { 
     echo '<a href="'.htmlspecialchars($file).'">'.htmlspecialchars($file).'</a><br/>'; 
    } 
} 
1

Проблема заключается в том, переменная $file содержит только базовое имя пути. Итак, вам нужно использовать $pth.$file.