PHP. Рекурсия не хочет работать
простая вещь, рекурсия, вот метод:
function check_file_due_recurs($dir)
{
$root = 'C:/Users/Professional/PhpstormProjects/test/7-ая лаба/';
chdir($dir);
$all_dirs = array_slice(scandir('.'), 2);
foreach ($all_dirs as $file) {
if (!preg_match('/\./', $file)){
check_file_due_recurs($file . '/');
}
else {
1;
}
}
}
Прошу помощи у гуру данного языка, нужно реализовать просто бобегушки по папкам и определенные файлы сливать в другую папку, я реализовал проверки, слив, но не получается сама рекурсия, причина какова, а не очень приятная, как вы видите по вот данной строке -- if (!preg_match('/\./', $file)){ вместо использования id_dir() я использовал кастыль который на деле не всегда работает, но мне подошел, ибо саам is_dir почему-то наотказ я думал идёт, ибо после просмотра первой папки которая пустая оно дальше не шло.
Я решил изменить is_dir на такую простую регулярку и в итоге да, оно заработало, только поломалось дальше, поломка в строке chdir($dir); вот тут оно даже ошибку выдает, или как в php (я просто новичек , для вуза нужно) выдает Warning красный и дальше не работает. Я попробовал через принты поотлаживать но это результата не дало, могу лишь сказать что оно почему-то после первой папки плохо понимает что дальше обрабатывать, то есть как, у меня директории такие:
1 папка - основная, в ней 2 папки и 1 файл, файл выкидываю так как он подходит, обрабатываю папки по той же функции, первая папка обрабатывается норм, если и в ней папки то тоже норм, но только первые, дальше, то есть вторая папка она не обрабатывается.
Короче, буду благодарен совету или уже рабочему коду.
Ответы (1 шт):
Рекурсивный обход каталогов, нативными методами:
function recursive($dir)
{
$odir = opendir($dir);
while (($file = readdir($odir)) !== FALSE)
{
if ($file == '.' || $file == '..')
{
continue;
}
if (is_dir($dir.DIRECTORY_SEPARATOR.$file))
{
recursive($dir.DIRECTORY_SEPARATOR.$file);
}
else
{
echo 'file: '.$dir.DIRECTORY_SEPARATOR.$file.PHP_EOL;
}
}
closedir($odir);
}
recursive("/home/name");