feat: implement centralized database configuration using .env file and custom loader
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
# =============================================
|
||||||
|
# Environment Configuration — WebGIS
|
||||||
|
# =============================================
|
||||||
|
# Template ini bisa dijadikan acuan.
|
||||||
|
# Salin sebagai .env dan isi sesuai server.
|
||||||
|
# JANGAN commit file .env ke repository!
|
||||||
|
# =============================================
|
||||||
|
|
||||||
|
DB_HOST=localhost
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_USER=root
|
||||||
|
DB_PASS=
|
||||||
|
DB_NAME=webgis_poverty
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Environment variables — jangan di-commit!
|
||||||
|
.env
|
||||||
|
|
||||||
|
# OS files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Loader .env sederhana (tanpa dependency external)
|
||||||
|
* Membaca file .env dari root project dan mengisi $_ENV / getenv()
|
||||||
|
*
|
||||||
|
* Cara pakai:
|
||||||
|
* require_once __DIR__ . '/env_loader.php';
|
||||||
|
* $val = env('DB_HOST', 'localhost');
|
||||||
|
*/
|
||||||
|
|
||||||
|
function loadEnv(string $path): void {
|
||||||
|
if (!file_exists($path)) {
|
||||||
|
return; // File .env tidak ada, gunakan nilai default
|
||||||
|
}
|
||||||
|
|
||||||
|
$lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||||
|
foreach ($lines as $line) {
|
||||||
|
// Skip komentar
|
||||||
|
$line = trim($line);
|
||||||
|
if ($line === '' || str_starts_with($line, '#')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pisahkan KEY=VALUE (hanya split di tanda = pertama)
|
||||||
|
$eqPos = strpos($line, '=');
|
||||||
|
if ($eqPos === false) continue;
|
||||||
|
|
||||||
|
$key = trim(substr($line, 0, $eqPos));
|
||||||
|
$value = trim(substr($line, $eqPos + 1));
|
||||||
|
|
||||||
|
// Hapus kutip jika ada ("value" atau 'value')
|
||||||
|
if (
|
||||||
|
(str_starts_with($value, '"') && str_ends_with($value, '"')) ||
|
||||||
|
(str_starts_with($value, "'") && str_ends_with($value, "'"))
|
||||||
|
) {
|
||||||
|
$value = substr($value, 1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set ke $_ENV dan putenv agar bisa diakses lewat getenv()
|
||||||
|
if (!array_key_exists($key, $_ENV)) {
|
||||||
|
$_ENV[$key] = $value;
|
||||||
|
putenv("$key=$value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper: ambil nilai env dengan fallback default
|
||||||
|
*/
|
||||||
|
function env(string $key, mixed $default = null): mixed {
|
||||||
|
return $_ENV[$key] ?? getenv($key) ?: $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-load .env dari root webgis/ (dua level di atas subfolder, satu level di atas subfolder ini)
|
||||||
|
loadEnv(__DIR__ . DIRECTORY_SEPARATOR . '.env');
|
||||||
+17
-8
@@ -1,17 +1,26 @@
|
|||||||
<?php
|
<?php
|
||||||
$host = "localhost";
|
// Load konfigurasi dari file .env di root webgis/
|
||||||
$user = "root";
|
require_once dirname(__DIR__) . '/env_loader.php';
|
||||||
$pass = "";
|
|
||||||
$db = "webgis_poverty";
|
|
||||||
|
|
||||||
// Coba koneksi ke server dan pilih database
|
$host = env('DB_HOST', 'localhost');
|
||||||
$conn = new mysqli($host, $user, $pass, $db);
|
$port = (int) env('DB_PORT', 3306);
|
||||||
|
$user = env('DB_USER', 'root');
|
||||||
|
$pass = env('DB_PASS', '');
|
||||||
|
$db = env('DB_NAME', 'webgis_poverty');
|
||||||
|
|
||||||
|
// Koneksi ke MySQL/MariaDB
|
||||||
|
$conn = new mysqli($host, $user, $pass, $db, $port);
|
||||||
|
|
||||||
if ($conn->connect_error) {
|
if ($conn->connect_error) {
|
||||||
die("Koneksi gagal: " . $conn->connect_error);
|
http_response_code(500);
|
||||||
|
die(json_encode([
|
||||||
|
'status' => 'error',
|
||||||
|
'message' => 'Koneksi database gagal: ' . $conn->connect_error,
|
||||||
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set charset
|
// Set charset
|
||||||
$conn->set_charset("utf8mb4");
|
$conn->set_charset('utf8mb4');
|
||||||
|
|
||||||
// Jika di-include oleh file API, biarkan $conn tersedia
|
// Jika di-include oleh file API, biarkan $conn tersedia
|
||||||
?>
|
?>
|
||||||
|
|||||||
+17
-8
@@ -1,17 +1,26 @@
|
|||||||
<?php
|
<?php
|
||||||
$host = "localhost";
|
// Load konfigurasi dari file .env di root webgis/
|
||||||
$user = "root";
|
require_once dirname(__DIR__) . '/env_loader.php';
|
||||||
$pass = "";
|
|
||||||
$db = "webgis_poverty";
|
|
||||||
|
|
||||||
// Coba koneksi ke server dan pilih database
|
$host = env('DB_HOST', 'localhost');
|
||||||
$conn = new mysqli($host, $user, $pass, $db);
|
$port = (int) env('DB_PORT', 3306);
|
||||||
|
$user = env('DB_USER', 'root');
|
||||||
|
$pass = env('DB_PASS', '');
|
||||||
|
$db = env('DB_NAME', 'webgis_poverty');
|
||||||
|
|
||||||
|
// Koneksi ke MySQL/MariaDB
|
||||||
|
$conn = new mysqli($host, $user, $pass, $db, $port);
|
||||||
|
|
||||||
if ($conn->connect_error) {
|
if ($conn->connect_error) {
|
||||||
die("Koneksi gagal: " . $conn->connect_error);
|
http_response_code(500);
|
||||||
|
die(json_encode([
|
||||||
|
'status' => 'error',
|
||||||
|
'message' => 'Koneksi database gagal: ' . $conn->connect_error,
|
||||||
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set charset
|
// Set charset
|
||||||
$conn->set_charset("utf8mb4");
|
$conn->set_charset('utf8mb4');
|
||||||
|
|
||||||
// Jika di-include oleh file API, biarkan $conn tersedia
|
// Jika di-include oleh file API, biarkan $conn tersedia
|
||||||
?>
|
?>
|
||||||
|
|||||||
+17
-8
@@ -1,17 +1,26 @@
|
|||||||
<?php
|
<?php
|
||||||
$host = "localhost";
|
// Load konfigurasi dari file .env di root webgis/
|
||||||
$user = "root";
|
require_once dirname(__DIR__) . '/env_loader.php';
|
||||||
$pass = "";
|
|
||||||
$db = "webgis_poverty";
|
|
||||||
|
|
||||||
// Coba koneksi ke server dan pilih database
|
$host = env('DB_HOST', 'localhost');
|
||||||
$conn = new mysqli($host, $user, $pass, $db);
|
$port = (int) env('DB_PORT', 3306);
|
||||||
|
$user = env('DB_USER', 'root');
|
||||||
|
$pass = env('DB_PASS', '');
|
||||||
|
$db = env('DB_NAME', 'webgis_poverty');
|
||||||
|
|
||||||
|
// Koneksi ke MySQL/MariaDB
|
||||||
|
$conn = new mysqli($host, $user, $pass, $db, $port);
|
||||||
|
|
||||||
if ($conn->connect_error) {
|
if ($conn->connect_error) {
|
||||||
die("Koneksi gagal: " . $conn->connect_error);
|
http_response_code(500);
|
||||||
|
die(json_encode([
|
||||||
|
'status' => 'error',
|
||||||
|
'message' => 'Koneksi database gagal: ' . $conn->connect_error,
|
||||||
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set charset
|
// Set charset
|
||||||
$conn->set_charset("utf8mb4");
|
$conn->set_charset('utf8mb4');
|
||||||
|
|
||||||
// Jika di-include oleh file API, biarkan $conn tersedia
|
// Jika di-include oleh file API, biarkan $conn tersedia
|
||||||
?>
|
?>
|
||||||
|
|||||||
Reference in New Issue
Block a user