= 2 && (($value[0] === '"' && $value[-1] === '"') || ($value[0] === "'" && $value[-1] === "'")) ) { $value = substr($value, 1, -1); } // Only set if not already defined by the server/environment if ($key !== '' && getenv($key) === false) { putenv("$key=$value"); $_ENV[$key] = $value; $_SERVER[$key] = $value; } } } } // Load .env from project root (two levels up from this file) loadEnvFile(dirname(__DIR__, 2) . '/.env'); if (!function_exists('loadDatabaseConfig')) { function loadDatabaseConfig(): array { $config = [ 'host' => getenv('DB_HOST') ?: 'localhost', 'user' => getenv('DB_USER') ?: 'root', 'pass' => getenv('DB_PASS') ?: '', 'name' => getenv('DB_NAME') ?: 'webgis_class', 'port' => (int)(getenv('DB_PORT') ?: 3306), 'charset' => getenv('DB_CHARSET') ?: 'utf8mb4', ]; // Allow local override file for development (not committed to git) $localConfigFile = __DIR__ . '/database.local.php'; if (is_file($localConfigFile)) { $localConfig = require $localConfigFile; if (is_array($localConfig)) { $config = array_merge($config, array_intersect_key($localConfig, $config)); } } return $config; } } $dbConfig = loadDatabaseConfig(); define('DB_HOST', $dbConfig['host']); define('DB_USER', $dbConfig['user']); define('DB_PASS', $dbConfig['pass']); define('DB_NAME', $dbConfig['name']); define('DB_PORT', $dbConfig['port']); define('DB_CHARSET', $dbConfig['charset']); function getDB(): mysqli { static $conn = null; if ($conn === null) { $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT); if ($conn->connect_error) { error_log('DB connection failed: ' . $conn->connect_error); http_response_code(500); echo json_encode([ 'status' => 'error', 'message' => 'Koneksi database gagal' ]); exit; } $conn->set_charset(DB_CHARSET); } return $conn; }