paulenot
@paulenot
IT Issue

Почему foreach функции не выполняется до конца?

function js_console($message) {
		$message = str_replace('\'', '"', $message);
		echo "<script>console.log('{$message}')</script>";
	}

	function autoinclude($path = __DIR__, $recursive = false) {
		if (file_exists($path)) {
			if (is_dir($path)){
				$files = scandir($path);
				foreach ($files as $name) {
					if ($name != '.' and $name != '..') {
						$fullpath = (substr($path, -1)=='/'?$path:$path.'/').$name;
						if (file_exists($fullpath)){
							if ($recursive != true){
								var_dump($fullpath);
								include $fullpath;
								js_console('[OKAY] included '.$fullpath);
							} else {
								if (is_dir($fullpath)){
									autoinclude($fullpath, true);
								} else {
									include $fullpath;
									js_console('[OKAY] included '.$fullpath);
								}
							}
						} else {
							js_console('[FAIL] not exists '.$fullpath);
						}
					}
				}
			} else {
				include $path;
				js_console('[OKAY] included '.$path);
			}
			return true;
		} else {
			js_console('[FAIL] not exists '.$path);
			return false;
		}
	}

Получаю:

string(25) "functions/autoinclude.php"

Я вызываю функцию autoinclude('functions/', false); // путь и рекурсия
После условия if ($recursive != true) стоит var_dump(), он отрабатывает всего один раз, выводит путь только к одному файлу, хотя их четыре.

Помогите пожалуйста понять что я пропустил. Уже устал искать то- не знаю что...
Выяснил что это происходит после строки foreach:
$files = scandir($path);
				var_dump($files);
				foreach ($files as $name) {
					echo '<b>'.$name.' | </b>';

Разбор по строкам:
1) получаем список файлов в папке
2) var_dump показывает как прошел поиск и вернул массив:
[0]=> string(1) "."
[1]=> string(2) ".."
[2]=> string(15) "autoinclude.php"
[3]=> string(14) "filesystem.php"
[4]=> string(14) "js_console.php"
[5]=> string(11) "vardump.php"

3) foreach перебирает массив 3 раза и завершает
4) Об этом говорит echo который возвращает 3 элемента:
.
..
autoinclude.php

В скрипте дальше идет условие if ($name != '.' and $name != '..') после чего выводится всего один путь вместо четырех....
Почему цикл проходит всего 3 цикла из 6?
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы