function printTree(int $level = 1) : void {
$dir = opendir('.');
if (!$dir) return;
while (($file = readdir($dir)) !== false) {
if ($file == '.' || $file == '..') continue;
if (!is_dir($file)) continue;
for ($i = 0; $i < $level; $i++) echo ' ';
echo $file . PHP_EOL;
if (!chdir($file)) continue;
printTree($level + 1);
chdir('..');
flush();
}
closedir($dir);
}
// Структура каталогов:
main_catalog
sub_catalog
file1.php
file2.php
next_sub_folder
В $dir, при запуске функции - дескриптор main_catalog
Не понятно, что происходит, когда функция запрыгнет в sub_catalog и разшарит все файлы там. Директория будет закрыта, дальше управление перейдет во внешний вызов сюда: chdir('..') - выход наверх в main_catalog. Во внешнем вызове, на следующей итерции while в $file будет содержатся next_sub_folder.
Как связан chdir('..') и то что содержится в $file? Ну то есть в первом вызове readdir($dir) возвращает все содержимое main_catalog, потом, после выпрыгивания из sub_catalog, на следующей итерации while readdir($dir) возвращает следующую директорию. Не могу точно сформулировать, chdir('..') влияет на эту переменную $dir?