74 lines
2.6 KiB
PHP
74 lines
2.6 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 ke Docker Host (host.docker.internal)
|
|
try {
|
|
$conn = new mysqli("host.docker.internal", "root", "", "pemetaan_kemiskinan", 3306);
|
|
} catch (Exception $e_docker) {
|
|
// 3. Coba koneksi Fallback ke Localhost murni
|
|
try {
|
|
$conn = new mysqli("localhost", "root", "", "pemetaan_kemiskinan", 3306);
|
|
} catch (Exception $e_local) {
|
|
// Jika semua gagal, berikan respon error
|
|
sendJSON('error', 'Koneksi database utama & fallback gagal: ' . $e_local->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();
|
|
}
|
|
|
|
?>
|