Почему не выводится содержимое каталога?

Задача такая: "Написать функцию, которая рекурсивно выведет на экран содержимое каталога. Функция принимает аргументом строку абсолютный путь к каталогу, который необходимо просканировать."

Функцию реализовал так:

<?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); 
}
→ Ссылка