Показать сообщение отдельно
  #1 (permalink)  
Старый 17.04.2024, 17:06
Аспирант
Отправить личное сообщение для firep91613 Посмотреть профиль Найти все сообщения от firep91613
 
Регистрация: 24.10.2023
Сообщений: 53

Работа с каталогами PHP
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?
Ответить с цитированием