Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: в версии PHP 5.2.5 стала не правильно работать функция подсчёта кол-ва файлов в каталоге.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: В предыдущих версиях всё нормально работало.
ARMADA
Отправлено: 13 Февраля, 2008 - 17:27:24
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Февр. 2008  


Помог: 0 раз(а)




Почемуто функции подсчёта кол-ва файлов стали видеть не существующий файл в пустом каталоге.

Я использую функцию:

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>";

Подскажите кто знает что можно сделать?

(Отредактировано автором: 13 Февраля, 2008 - 17:30:31)

 
 Top
valenok Модератор
Отправлено: 13 Февраля, 2008 - 17:38:39
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Опробуйте
$dirs = glob($curDir . '/*', GLOB_ONLYDIR);
Посмотрите что у вас в $path
Попробуйте указать эту директорию прямым текстом в другом скрипте ..


-----
Truly yours, Sasha.
 
My status
 Top
ARMADA
Отправлено: 13 Февраля, 2008 - 18:51:30
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Февр. 2008  


Помог: 0 раз(а)




Не помогло.
В $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>";

Спасибо всем за помощь.

(Отредактировано автором: 13 Февраля, 2008 - 18:57:39)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB