From a3854fe5b8fcbee2c04082fd78377be1d24ae1f0 Mon Sep 17 00:00:00 2001 From: Maaxxs <61059039+MaaxxsDev@users.noreply.github.com> Date: Sun, 5 Jul 2026 14:08:14 +0200 Subject: [PATCH] Fix fatal error when db.php doesn't exist yet on a fresh deployment config.php and SetupController beide luden db.php bisher ungeprueft per require, was auf einem frischen Server (vor der Ersteinrichtung) zu einem fatalen Fehler gefuehrt haette, noch bevor /setup ueberhaupt erreichbar ist. Faellt jetzt auf eine leere Config zurueck. Co-Authored-By: Claude Sonnet 5 --- hifi/api/config/config.php | 6 +++++- hifi/api/src/Controllers/SetupController.php | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/hifi/api/config/config.php b/hifi/api/config/config.php index fe3c2b5..0306e7e 100644 --- a/hifi/api/config/config.php +++ b/hifi/api/config/config.php @@ -3,7 +3,11 @@ return [ // Ausgelagert, damit das Admin-Panel (Einstellungen -> Datenbank) diese Datei // gezielt neu schreiben kann, ohne den Rest dieser Konfiguration anzufassen. - 'db' => require __DIR__ . '/db.php', + // Existiert db.php noch nicht (frischer Server vor der Ersteinrichtung), wird + // hier bewusst NICHT fatal abgebrochen, damit /setup überhaupt erreichbar ist. + 'db' => is_file(__DIR__ . '/db.php') + ? require __DIR__ . '/db.php' + : ['host' => '', 'name' => '', 'user' => '', 'pass' => '', 'charset' => 'utf8mb4'], // Einmalpasswort für den Ersteinrichtungs-Assistenten unter /setup (siehe setup.php.example). // Liegt in einer eigenen, nicht versionierten Datei, genau wie db.php. 'setup_password' => is_file(__DIR__ . '/setup.php') ? require __DIR__ . '/setup.php' : null, diff --git a/hifi/api/src/Controllers/SetupController.php b/hifi/api/src/Controllers/SetupController.php index 2e9e854..d388528 100644 --- a/hifi/api/src/Controllers/SetupController.php +++ b/hifi/api/src/Controllers/SetupController.php @@ -20,9 +20,17 @@ class SetupController return ($pw !== null && $pw !== '') ? $pw : null; } + private static function currentDbConfig(): array + { + $path = __DIR__ . '/../../config/db.php'; + return is_file($path) + ? require $path + : ['host' => '', 'name' => '', 'user' => '', 'pass' => '', 'charset' => 'utf8mb4']; + } + private static function tryConnect(?array $overrideConfig = null): ?PDO { - $db = $overrideConfig ?? require __DIR__ . '/../../config/db.php'; + $db = $overrideConfig ?? self::currentDbConfig(); try { $dsn = "mysql:host={$db['host']};dbname={$db['name']};charset=" . ($db['charset'] ?? 'utf8mb4'); return new PDO($dsn, $db['user'], $db['pass'], [