Почемуто функции подсчёта кол-ва файлов стали видеть не существующий файл в пустом каталоге.
Я использую функцию:
function allfiles ($path)
{
$path = $path."/*";
foreach (glob($path) as $v)
{
if(is_dir($v)) $all += allfiles ($v);
else
$all++;
}
if ($all == '' ) $all = 0;
return $all;
}
И она возвращает какоето значение, но не 0.
И выдаёт ошибку:
Warning: Invalid argument supplied for foreach() in .......code.php
on line 66
А если в каталоге есть файлы то всё нормально считает и ошибки не выдаёт.
Я прочёл что в версии 5.2.5 былы внесены изменения в функцию glob() 'Fixed regression
in glob() when enforcing safe_mode/open_basedir checks on paths containing '*'.' но почему оно стало не правильно работать не пойму.
И в этом коде sort() начал выдавать ошибку и не сробатывает условие: if ($all == 0) echo "[Раздел пуст]<br>"; в пустых каталогах.
$list = glob ($path.$d."*" ) ;
$all = count ($list);
sort($list);
if ($all == 0) echo "[Раздел пуст]<br>";
Подскажите кто знает что можно сделать?
1. ARMADA - 13 Февраля, 2008 - 17:27:24 - перейти к сообщению
2. valenok - 13 Февраля, 2008 - 17:38:39 - перейти к сообщению
Опробуйте
$dirs = glob($curDir . '/*', GLOB_ONLYDIR);
Посмотрите что у вас в $path
Попробуйте указать эту директорию прямым текстом в другом скрипте ..
$dirs = glob($curDir . '/*', GLOB_ONLYDIR);
Посмотрите что у вас в $path
Попробуйте указать эту директорию прямым текстом в другом скрипте ..
3. ARMADA - 13 Февраля, 2008 - 18:51:30 - перейти к сообщению
Не помогло.
В $path указан адресс каталога в виде loadfiles/ в $d укзан каталог file
При выводе содержимого массива вижу что в пустых каталогах массива не создаётся а функция
$list = glob ($path.$d."/*" );
$all = count ($list);
Выводит результат 1 а должен быть 0
(Добавление)
Я увидел разницу работы glob() в версиях < 5.2.5
В версиях ниже 5.2.5 glob() в пустых каталогах возвращает пустой массив
Array
(
)
А в версии 5.2.5 массив вообще не создаётся а возвращается просто false
(Добавление)
Решил я эту проблему изменением функции
на
function allfiles ($path)
{
$path = $path."/*";
$all = 0;
$arr = glob($path);
if (is_array($arr))
foreach ($arr as $v)
{
if(is_dir($v)) $all += allfiles ($v);
else
$all++;
}
return $all;
}
и
$list = glob ($path.$d."*");
$all = (!$list)?0:sizeof($list);
if (is_array($list)) sort($list)
if ($all == 0) echo "[Раздел пуст]<br>";
Спасибо всем за помощь.
В $path указан адресс каталога в виде loadfiles/ в $d укзан каталог file
При выводе содержимого массива вижу что в пустых каталогах массива не создаётся а функция
$list = glob ($path.$d."/*" );
$all = count ($list);
Выводит результат 1 а должен быть 0
(Добавление)
Я увидел разницу работы glob() в версиях < 5.2.5
В версиях ниже 5.2.5 glob() в пустых каталогах возвращает пустой массив
Array
(
)
А в версии 5.2.5 массив вообще не создаётся а возвращается просто false
(Добавление)
Решил я эту проблему изменением функции
на
function allfiles ($path)
{
$path = $path."/*";
$all = 0;
$arr = glob($path);
if (is_array($arr))
foreach ($arr as $v)
{
if(is_dir($v)) $all += allfiles ($v);
else
$all++;
}
return $all;
}
и
$list = glob ($path.$d."*");
$all = (!$list)?0:sizeof($list);
if (is_array($list)) sort($list)
if ($all == 0) echo "[Раздел пуст]<br>";
Спасибо всем за помощь.