Функция чтения списка файлов в каталоге

EO
На сайте с 10.05.2005
Offline
114
811

Здравствуйте!

Нашел вот такую функцию для чтения списка файлов в каталоге, включая все подкаталоги:


Function ListFileAll ($folder, &$files)
{
$fp = opendir($folder);
while($cv_file = readdir($fp))
{
if(is_file($folder."/".$cv_file)) $files[] = $folder."/".$cv_file;
elseif($cv_file!="." && $cv_file != ".." && is_dir($folder."/".$cv_file)) ListFileAll($folder."/".$cv_file, $files);
}
closedir($fp);
}

Работает она хорошо, НО если в каталоге есть только файлы и нет подкаталогов, то она ничего не выдает, как будто каталог пустой.

Если же в каталоге есть файлы и есть подкаталоги, тогда функция выдает весь список файлов в каталоге и подкаталогах.

Как я понял, while($cv_file = readdir($fp)) не отрабатывает ни разу, если нет подкаталогов?

Подскажите, пожалуйста, как это исправить?

Думал флажок ставить, который сбрасывается, если было хоть раз исполнение While...

Или есть более изящное решение?

---------- Добавлено 13.01.2016 в 13:09 ----------

Странно..., сейчас добавил в каталог подкаталог с одним файлом, все равно ничего не выдает, а на других двух сайтах, все работает, похоже, здесь будут другие симптомы...

---------- Добавлено 13.01.2016 в 13:12 ----------

А вызов функции:

Function ListFile ($dir)

{
$nDir = opendir($dir);
while (false !== ($file = readdir($nDir)))
{
if ($file != "." AND $file != "..")
{
if (!is_dir($dir . $file)) $files [] = $file;
}
}
closedir( $nDir );
return $files;
}

Выдает список файлов в каталоге. Причем вызов идет абсолютно с тем же адресом папки.

Как такое может быть?

Только на одном сайте такое происходит?

Может права какие на папки?

---------- Добавлено 13.01.2016 в 13:16 ----------

Всем спасибо :) Дело было в правах на папку на этом сайте.

Бооольшой портал о мааалом бизнесе (http://www.bizguru.ru/) | Более 1000 бизнес-программ (http://1.44mb.ru) По выходным не работаю - не ищите меня в сети. В понедельник я обычно сам возвращаюсь :)
[Удален]
#1

10 символов

EO
На сайте с 10.05.2005
Offline
114
#2
imagine:
чем scandir не угодил?
http://php.net/manual/ru/function.scandir.php

<?php
$path = '/tmp';
$files = scandir($path);
print_r( $files );
?>

Видел и такой вариант, мой мне показался самым коротким, ведь в вашем варианте еще нужно, в подпапках читать список файлов, т.к. команда scandir выдает список файлов и каталогов.

Уже нашел причину, добавил в первое сообщение :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий