public static function checkFS() { $search = Cache::exec(array('composer.lock'), __FILE__ . 'init', function () { $search = array(); $ex = array_merge(array(Path::$conf['cache'], Path::$conf['data']), Path::$conf['search']); Search::scan('', function ($src, $level) use(&$search, $ex) { if (in_array($src, $ex)) { return true; } //вглубь не идём if ($level < 2) { return; } if ($level > 5) { return true; } if (!is_file($src . '.infra.json')) { return; } $r = explode('/', $src); array_pop($r); array_pop($r); $search[] = implode('/', $r) . '/'; return false; //вглубь не идём и в соседние папки тоже }); return $search; }); Path::$conf['search'] = array_values(array_unique(array_merge(Path::$conf['search'], $search))); if (Config::$all) { //Если все конфиги были уже обраны, нужно заного пробежаться по найденным for ($i = 0; $i < sizeof($search); $i++) { $tsrc = $search[$i]; if (!is_dir($tsrc)) { continue; } $files = scandir($tsrc); foreach ($files as $file) { if ($file[0] == '.') { continue; } if (!is_dir($tsrc . $file)) { continue; } Config::load($tsrc . $file . '/.infra.json', $file); } } } /*$comp = Load::loadJSON('composer.json'); if ($comp && !empty($comp['require'])) { foreach ($comp['require'] as $n => $v) { $r = explode('/', $n); if (sizeof($r) != 2) continue; $path = 'vendor/'.$r[0].'/'; if (!in_array($path, Path::$conf['search'])){ Path::$conf['search'][] = $path; } } }*/ }