Изменить вывод списка файлов

TheRealKos

Новичок
Доброго времени суток. В общем есть такой вот код, который выводит файлы в папке upload/Группа/Логин. Но если в папке Логин есть еще папки, то он и их выведет (а нужно только файлы).
PHP:
$dir = "upload/".$array2["group"]."/".$array2["login"]."/";
echo $dir;
if(is_dir($dir))
{
    $files = scandir($dir); //сканируем (получаем массив файлов)
    array_shift($files); // удаляем из массива '.'
    array_shift($files); // удаляем из массива '..'
    for($i=0; $i<sizeof($files); $i++)
    {
        if($array !== false)
        {
            $s=(array_key_exists($files[$i],$array)==true)?$array[$files[$i]]:'';
        }
            else
            {
                $s = '';
            }
            echo '<a href="'.$dir.$files[$i].'" title="Скачать файл"> '.$files[$i].'<br></a> '.$s.' ';
    }
}
Знаю, что можно рекурсией (но как правильно сделать так и не понял). Собственно говоря нашел вот такой код с рекурсией, но как адаптировать не знаю.
PHP:
function glob_recursive($dir, $mask){
        foreach(glob($dir.'/*') as $filename){
                if(strtolower(substr($filename, strlen($filename)-strlen($mask), strlen($mask)))==strtolower($mask)) echo $filename."<br>";
                if(is_dir($filename)) glob_recursive($filename, $mask);
        }
}
glob_recursive("upload/".$array2["group"]."/".$array2["login"]."/", ".doc");
Ругается на строчки function glob_recursive($dir, $mask){ с ошибкой Fatal error: Cannot redeclare glob_recursive() (previously declared in ). И на foreach(glob($dir.'/*') as $filename){ с ошибкой (Warning: Invalid argument supplied for foreach() in

И как изменить в маске, чтобы искал не только форматы .doc, но и .docx?
 

ossorian

Новичок
После слова in... - как раз идёт текст, где у тебя уже ранее была объявлена эта функция. Без этой информации ты проблему не решишь.
И вообще по-моему можно решить проблему намного проще и будет находить все файлы с раширением, начниающимися с .doc - или что задашь:
PHP:
function glob_recursive($dir, $mask){
        foreach(glob($dir.'/*') as $filename){
            if(is_dir($filename)) glob_recursive($filename, $mask);
            elseif( strpos( pathinfo( $filename, PATHINFO_EXTENSION), $mask) === 0) echo "$filename<br>";
        }
}
ИМХО - я бы pathinfo и strpos - разбил бы на строки для читаемости, конечно.
 
Сверху