107 lines
2.9 KiB
PHP
107 lines
2.9 KiB
PHP
<?php
|
|
mysqli_report(MYSQLI_REPORT_OFF);
|
|
|
|
$host = getenv('DB_HOST') ?: 'db';
|
|
$port = (int)(getenv('DB_PORT') ?: 3306);
|
|
$rootPass = getenv('DB_ROOT_PASSWORD') ?: 'rootwebgis';
|
|
$appUser = getenv('DB_USER') ?: 'webgis';
|
|
$appPass = getenv('DB_PASSWORD') ?: 'webgis';
|
|
|
|
function log_line($message) {
|
|
echo "[initdb] " . $message . PHP_EOL;
|
|
}
|
|
|
|
function connect_mysql($host, $user, $pass, $db = null, $port = 3306) {
|
|
$conn = mysqli_init();
|
|
$conn->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
|
|
if (@$conn->real_connect($host, $user, $pass, $db, $port)) {
|
|
$conn->set_charset('utf8mb4');
|
|
return $conn;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
$conn = null;
|
|
$lastError = '';
|
|
|
|
for ($i = 1; $i <= 90; $i++) {
|
|
$conn = connect_mysql($host, 'root', $rootPass, null, $port);
|
|
if ($conn) {
|
|
break;
|
|
}
|
|
$lastError = mysqli_connect_error();
|
|
log_line("Menunggu database siap ($i/90): " . ($lastError ?: 'belum siap'));
|
|
sleep(2);
|
|
}
|
|
|
|
if (!$conn) {
|
|
log_line("Database tidak bisa dihubungi. Host=$host Port=$port Error=$lastError");
|
|
exit(1);
|
|
}
|
|
|
|
log_line('Database siap.');
|
|
|
|
$safeUser = $conn->real_escape_string($appUser);
|
|
$safePass = $conn->real_escape_string($appPass);
|
|
$conn->query("CREATE USER IF NOT EXISTS '{$safeUser}'@'%' IDENTIFIED BY '{$safePass}'");
|
|
$conn->query("GRANT ALL PRIVILEGES ON *.* TO '{$safeUser}'@'%'");
|
|
$conn->query("FLUSH PRIVILEGES");
|
|
|
|
function table_exists($conn, $db, $table) {
|
|
$db = $conn->real_escape_string($db);
|
|
$table = $conn->real_escape_string($table);
|
|
$result = $conn->query("SHOW TABLES FROM `{$db}` LIKE '{$table}'");
|
|
return $result && $result->num_rows > 0;
|
|
}
|
|
|
|
function import_sql_file($conn, $path, $label) {
|
|
if (!is_file($path)) {
|
|
log_line("Lewati {$label}: file tidak ditemukan {$path}");
|
|
return;
|
|
}
|
|
|
|
$sql = file_get_contents($path);
|
|
if ($sql === false || trim($sql) === '') {
|
|
log_line("Lewati {$label}: file kosong");
|
|
return;
|
|
}
|
|
|
|
log_line("Import {$label} dari {$path}");
|
|
if (!$conn->multi_query($sql)) {
|
|
log_line("Import {$label} gagal: " . $conn->error);
|
|
exit(1);
|
|
}
|
|
|
|
do {
|
|
if ($result = $conn->store_result()) {
|
|
$result->free();
|
|
}
|
|
if ($conn->errno) {
|
|
log_line("Import {$label} gagal: " . $conn->error);
|
|
exit(1);
|
|
}
|
|
} while ($conn->more_results() && $conn->next_result());
|
|
|
|
log_line("Import {$label} selesai.");
|
|
}
|
|
|
|
if (!table_exists($conn, 'spbu_db', 'spbu')) {
|
|
import_sql_file($conn, '/var/www/html/01/spbu_db.sql', 'spbu_db');
|
|
} else {
|
|
log_line('spbu_db sudah ada.');
|
|
}
|
|
|
|
if (!table_exists($conn, 'webgis2', 'jalan')) {
|
|
import_sql_file($conn, '/var/www/html/02/webgis2.sql', 'webgis2');
|
|
} else {
|
|
log_line('webgis2 sudah ada.');
|
|
}
|
|
|
|
if (!table_exists($conn, 'webgis_uas', 'rumah_ibadah')) {
|
|
import_sql_file($conn, '/var/www/html/05/webgis_uas.sql', 'webgis_uas');
|
|
} else {
|
|
log_line('webgis_uas sudah ada.');
|
|
}
|
|
|
|
log_line('Inisialisasi database selesai.');
|