Делаю так (код ниже), но возникает зацикленность.
К тому же, не могу сообразить, как и где должен быть в этом случае счетчик файлов. Ведь при рекурсии он обнулится...
Подскажите, прошу.
$dirname = "c:/Download";
function finc($directory)
{
//Счетчик файлов
$file_count = 0;
//Читаем содержимое каталога в массив
$arr = scandir($directory);
foreach($arr as $file)
{
if(is_file("$directory/$file")) ++$file_count;
else if (is_dir("$directory/$file") && $file != "." || $file != "..")
{
finc("$directory/$file");
}
}
return $file_count;
}
echo finc($dirname);
Спустя 8 минут, 38 секунд (8.03.2010 - 20:29) krasilich написал(а):
$dirname = "c:/Download";
function finc($directory)
{
//Счетчик файлов
$file_count = 0;
//Читаем содержимое каталога в массив
$arr = scandir($directory);
foreach($arr as $file)
{
if(is_file("$directory/$file")) ++$file_count;
else if (is_dir("$directory/$file") && ($file != "." || $file != ".."))
{
$file_count += finc("$directory/$file");
}
else
continue;
}
return $file_count;
}
echo finc($dirname);
Спустя 17 минут (8.03.2010 - 20:46) baston написал(а):
see_man
Спасибо, но зацикленность осталась... Проверял на папке с двумя файлами и вложенной папке с одним файлом. Должно было показать 3, а цикл, цикл, цикл...
Спасибо, но зацикленность осталась... Проверял на папке с двумя файлами и вложенной папке с одним файлом. Должно было показать 3, а цикл, цикл, цикл...
Спустя 20 минут, 16 секунд (8.03.2010 - 21:06) twin написал(а):
$file != "." && $file != ".."
А зачем там continue; ?
А зачем там continue; ?
Спустя 4 минуты, 48 секунд (8.03.2010 - 21:11) DedMorozzz написал(а):
у тя ф-я сама ся внутри себя же вызывает. естесно циклит!
Спустя 6 минут, 24 секунды (8.03.2010 - 21:17) baston написал(а):
Согласен. Значит, другая логика должна быть.
Спустя 35 минут, 19 секунд (8.03.2010 - 21:53) baston написал(а):
Вот так сработало:
$dirname = "c:/Download";
function finc($directory)
{
$file_count = 0;
$dir = opendir($directory);
while($file = readdir($dir))
{
if(is_file("$directory/$file")) ++$file_count;
else if(is_dir("$directory/$file") && $file != "." && $file != "..")
{
$file_count += finc("$directory/$file");
}
}
closedir($dir);
return $file_count;
}
echo finc($dirname);
Спустя 14 минут, 22 секунды (8.03.2010 - 22:07) baston написал(а):
Собственно, сработала и мой предыдущий скрипт. Я изменил оператор || на && (и).
<?php
$dirname = "c:/WINDOWS";
function finc($directory)
{
//Счетчик файлов
$file_count = 0;
//Читаем содержимое каталога в массив
$arr = scandir($directory);
foreach($arr as $file)
{
if(is_file("$directory/$file")) ++$file_count;
else if (is_dir("$directory/$file") && $file != "." && $file != "..")
{
$file_count += finc("$directory/$file");
}
}
return $file_count;
}
echo finc($dirname);
?>