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?