* @copyright walkor * @link http://www.workerman.net/ * @license http://www.opensource.org/licenses/mit-license.php MIT License */ use Dotenv\Dotenv; use support\Log; use Webman\Bootstrap; use Webman\Config; use Webman\Route; use Webman\Middleware; use Webman\Util; $worker = $worker ?? null; set_error_handler(function ($level, $message, $file = '', $line = 0) { if (error_reporting() & $level) { throw new ErrorException($message, 0, $level, $file, $line); } }); if ($worker) { register_shutdown_function(function ($start_time) { if (time() - $start_time <= 1) { sleep(1); } }, time()); } if (class_exists('Dotenv\Dotenv') && file_exists(base_path() . '/.env')) { if (method_exists('Dotenv\Dotenv', 'createUnsafeImmutable')) { Dotenv::createUnsafeImmutable(base_path())->load(); } else { Dotenv::createMutable(base_path())->load(); } } Config::clear(); support\App::loadAllConfig(['route']); if ($timezone = config('app.default_timezone')) { date_default_timezone_set($timezone); } foreach (config('autoload.files', []) as $file) { include_once $file; } foreach (config('plugin', []) as $firm => $projects) { foreach ($projects as $name => $project) { if (!is_array($project)) { continue; } foreach ($project['autoload']['files'] ?? [] as $file) { include_once $file; } } foreach ($projects['autoload']['files'] ?? [] as $file) { include_once $file; } } Middleware::load(config('middleware', []), ''); foreach (config('plugin', []) as $firm => $projects) { foreach ($projects as $name => $project) { if (!is_array($project) || $name === 'static') { continue; } Middleware::load($project['middleware'] ?? [], ''); } Middleware::load($projects['middleware'] ?? [], $firm); if ($static_middlewares = config("plugin.$firm.static.middleware")) { Middleware::load(['__static__' => $static_middlewares], $firm); } } Middleware::load(['__static__' => config('static.middleware', [])], ''); foreach (config('bootstrap', []) as $class_name) { if (!class_exists($class_name)) { $log = "Warning: Class $class_name setting in config/bootstrap.php not found\r\n"; echo $log; Log::error($log); continue; } /** @var Bootstrap $class_name */ $class_name::start($worker); } foreach (config('plugin', []) as $firm => $projects) { foreach ($projects as $name => $project) { if (!is_array($project)) { continue; } foreach ($project['bootstrap'] ?? [] as $class_name) { if (!class_exists($class_name)) { $log = "Warning: Class $class_name setting in config/plugin/$firm/$name/bootstrap.php not found\r\n"; echo $log; Log::error($log); continue; } /** @var Bootstrap $class_name */ $class_name::start($worker); } } foreach ($projects['bootstrap'] ?? [] as $class_name) { if (!class_exists($class_name)) { $log = "Warning: Class $class_name setting in plugin/$firm/config/bootstrap.php not found\r\n"; echo $log; Log::error($log); continue; } /** @var Bootstrap $class_name */ $class_name::start($worker); } } $directory = base_path() . '/plugin'; $paths = [config_path()]; foreach (Util::scanDir($directory) as $path) { if (is_dir($path = "$path/config")) { $paths[] = $path; } } Route::load($paths);