Почему не выводится содержимое каталога?
Задача такая: "Написать функцию, которая рекурсивно выведет на экран содержимое каталога. Функция принимает аргументом строку абсолютный путь к каталогу, который необходимо просканировать."
Функцию реализовал так:
<?php
$path=getcwd();
printDirContents($path);
function printDirContents($path){
$dir=opendir($path);
while($name=readdir($dir)){
if($name[0]=='.'){
continue;
}
if(is_dir($name)){
echo " d ".$name."\n";
$pathThisDir=$path."/$name";
printDirContents($pathThisDir);
}
elseif(is_file($name)){
echo " f ".$name."\n";
}
}
closedir($dir);
}
?>
Структура директории и вывод в терминале такие:

Подскажите пожалуйста почему не выводится вложенная структура директорий?
Ответы (1 шт):
Автор решения: Laukhin Andrey
→ Ссылка
Функция readdir() возвращает наименование файла/папки, а не полный путь. Поэтому функции is_dir() и is_file() вернут false при следующем рекурсивном вызове (за исключением случаев, когда в корневой и вложенной папке есть одноименные элементы).
Если проверять полный путь, то всё заработает:
$path = getcwd();
printDirContents($path);
function printDirContents($path) {
$dir = opendir($path);
while(false !== ($name = readdir($dir))) {
if($name[0]=='.') continue;
$fullPath = $path .'/'. $name;
if(is_dir($fullPath)) {
echo " d ".$name."\n";
printDirContents($fullPath);
}
else {
echo " f ".$name."\n";
}
}
closedir($dir);
}