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 <noreply@anthropic.com>
This commit is contained in:
Maaxxs 2026-07-05 14:08:14 +02:00
parent fe6b463135
commit a3854fe5b8
2 changed files with 14 additions and 2 deletions

View file

@ -3,7 +3,11 @@
return [ return [
// Ausgelagert, damit das Admin-Panel (Einstellungen -> Datenbank) diese Datei // Ausgelagert, damit das Admin-Panel (Einstellungen -> Datenbank) diese Datei
// gezielt neu schreiben kann, ohne den Rest dieser Konfiguration anzufassen. // 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). // Einmalpasswort für den Ersteinrichtungs-Assistenten unter /setup (siehe setup.php.example).
// Liegt in einer eigenen, nicht versionierten Datei, genau wie db.php. // Liegt in einer eigenen, nicht versionierten Datei, genau wie db.php.
'setup_password' => is_file(__DIR__ . '/setup.php') ? require __DIR__ . '/setup.php' : null, 'setup_password' => is_file(__DIR__ . '/setup.php') ? require __DIR__ . '/setup.php' : null,

View file

@ -20,9 +20,17 @@ class SetupController
return ($pw !== null && $pw !== '') ? $pw : null; 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 private static function tryConnect(?array $overrideConfig = null): ?PDO
{ {
$db = $overrideConfig ?? require __DIR__ . '/../../config/db.php'; $db = $overrideConfig ?? self::currentDbConfig();
try { try {
$dsn = "mysql:host={$db['host']};dbname={$db['name']};charset=" . ($db['charset'] ?? 'utf8mb4'); $dsn = "mysql:host={$db['host']};dbname={$db['name']};charset=" . ($db['charset'] ?? 'utf8mb4');
return new PDO($dsn, $db['user'], $db['pass'], [ return new PDO($dsn, $db['user'], $db['pass'], [