Files
Webgis/01/php/koneksi.php
2026-06-12 23:04:30 +07:00

79 lines
3.1 KiB
PHP

<?php
// ========================================
// FILE: php/koneksi.php
// Konfigurasi Koneksi Database
// ========================================
// CORS HEADERS - Wajib ada agar request dari browser tidak diblok
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, X-Requested-With');
header('Content-Type: application/json; charset=utf-8');
// Handle preflight request (OPTIONS)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit();
}
// Baca dari Environment Variable (untuk deployment Coolify/server)
// Jika tidak ada, fallback ke konfigurasi XAMPP lokal
$host = getenv('DB_HOST') ?: ($_SERVER['DB_HOST'] ?? ($_ENV['DB_HOST'] ?? "localhost"));
$username = getenv('DB_USER') ?: ($_SERVER['DB_USER'] ?? ($_ENV['DB_USER'] ?? "root"));
$password = getenv('DB_PASSWORD') ?: ($_SERVER['DB_PASSWORD'] ?? ($_ENV['DB_PASSWORD'] ?? ""));
$database = getenv('DB_DATABASE') ?: ($_SERVER['DB_DATABASE'] ?? ($_ENV['DB_DATABASE'] ?? "pemetaan_kemiskinan"));
$port = getenv('DB_PORT') ?: ($_SERVER['DB_PORT'] ?? ($_ENV['DB_PORT'] ?? 3306));
// KONEKSI MYSQLI DENGAN LOGIKA FALLBACK
$conn = null;
// Aktifkan throwing exception untuk mysqli agar try-catch berfungsi dengan baik
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
// 1. Coba koneksi utama sesuai konfigurasi Environment / Env File
$conn = new mysqli($host, $username, $password, $database, (int)$port);
} catch (Exception $e) {
// 2. Coba koneksi Fallback Pertama: Backup Kredensial Keras Database Coolify (Internal Network)
try {
$conn = new mysqli("tk4ksw0w40kg080wkk4soww4", "mysql", "KBw0yKLccMMoBOZJCf8WDHAO93uI65om0s4ajnzQEt5mkuh0NaIytoWb7TgR5ciq", "default", 3306);
} catch (Exception $e_backup) {
// 3. Coba koneksi Fallback Kedua ke Docker Host lokal (host.docker.internal)
try {
$conn = new mysqli("host.docker.internal", "root", "", "pemetaan_kemiskinan", 3306);
} catch (Exception $e_docker) {
// 4. Coba koneksi Fallback Ketiga ke Localhost murni (XAMPP default)
try {
$conn = new mysqli("localhost", "root", "", "pemetaan_kemiskinan", 3306);
} catch (Exception $e_local) {
// Jika semua gagal, berikan respon error
sendJSON('error', 'Koneksi database utama & seluruh fallback gagal. Error Utama: ' . $e->getMessage() . ' | Error Backup: ' . $e_backup->getMessage());
exit();
}
}
}
}
// SET CHARSET UTF-8
$conn->set_charset("utf8mb4");
// FUNCTION UNTUK ESCAPE INPUT
function sanitize($string, $conn) {
return $conn->real_escape_string(strip_tags(trim($string)));
}
// FUNCTION UNTUK RESPONSE JSON
function sendJSON($status, $message, $data = null) {
$response = [
'status' => $status,
'message' => $message
];
if ($data !== null) {
$response['data'] = $data;
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit();
}
?>