file .env di root project > default. // File .env opsional — di dalam container memang tidak ada. function loadEnvFile(string $path): array { if (!is_file($path)) { return []; } $vars = []; foreach (file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) { if (str_starts_with(trim($line), '#') || !str_contains($line, '=')) continue; [$key, $value] = explode('=', $line, 2); $vars[trim($key)] = trim($value); } return $vars; } function env(string $key): ?string { static $fileVars = null; if ($fileVars === null) { $fileVars = loadEnvFile(__DIR__ . '/../.env'); } $real = getenv($key); if ($real !== false && $real !== '') { return $real; } return ($fileVars[$key] ?? '') !== '' ? $fileVars[$key] : null; } // Nama variabel project ini (DB_NAME/DB_USER/DB_PASS) maupun alias gaya Laravel // (DB_DATABASE/DB_USERNAME/DB_PASSWORD) sama-sama diterima — lihat Aturan #2. function dbConfig(): array { $envAny = function (array $keys, string $default): string { foreach ($keys as $key) { $value = env($key); if ($value !== null) return $value; } return $default; }; return [ 'host' => $envAny(['DB_HOST'], 'localhost'), 'port' => $envAny(['DB_PORT'], '3306'), 'dbname' => $envAny(['DB_NAME', 'DB_DATABASE'], ''), 'username' => $envAny(['DB_USER', 'DB_USERNAME'], 'root'), 'password' => $envAny(['DB_PASS', 'DB_PASSWORD'], ''), ]; }