Upload files to "/"

This commit is contained in:
2026-06-10 10:31:28 +00:00
parent 54f97123d5
commit 2f66273f68
3 changed files with 128 additions and 38 deletions
+49 -16
View File
@@ -1,5 +1,5 @@
<?php
// install_database.php - installer sementara database Tugas_SIG Tiara
// install_database.php - installer sementara database Tugas SIG Tiara
// HAPUS file ini setelah database berhasil diimport.
set_time_limit(300);
@@ -7,34 +7,67 @@ set_time_limit(300);
$host = getenv('DB_HOST') ?: 'localhost';
$user = getenv('DB_USER') ?: 'root';
$pass = getenv('DB_PASS') ?: (getenv('DB_PASSWORD') ?: '');
$db = getenv('DB_NAME') ?: 'db_poverty_mapping';
$port = (int)(getenv('DB_PORT') ?: 3306);
$requestedDb = getenv('DB_NAME') ?: 'db_poverty_mapping';
echo "<h2>Install Database Tugas SIG Tiara</h2>";
echo "<p>Target koneksi: <b>" . htmlspecialchars($host) . ":" . htmlspecialchars((string)$port) . "</b>, database: <b>" . htmlspecialchars($db) . "</b>, user: <b>" . htmlspecialchars($user) . "</b></p>";
$dbCandidates = array_values(array_unique(array_filter([
$requestedDb,
getenv('MYSQL_DATABASE') ?: null,
'default',
'db_poverty_mapping'
])));
$conn = new mysqli($host, $user, $pass, $db, $port);
mysqli_report(MYSQLI_REPORT_OFF);
$conn = new mysqli($host, $user, $pass, '', $port);
if ($conn->connect_error) {
die("<p style='color:red'>Koneksi gagal: " . htmlspecialchars($conn->connect_error) . "</p>");
die("<h2>Install Database Tugas SIG Tiara</h2><p style='color:red'>Koneksi server database gagal: " . htmlspecialchars($conn->connect_error) . "</p>");
}
$sqlFile = __DIR__ . "/database.sql";
$selectedDb = null;
$selectErrors = [];
foreach ($dbCandidates as $candidate) {
if (!$candidate) continue;
if (@$conn->select_db($candidate)) {
$selectedDb = $candidate;
break;
}
$selectErrors[] = $candidate . ' => ' . $conn->error;
}
echo "<h2>Install Database Tugas SIG Tiara</h2>";
echo "<p>Target server: <b>" . htmlspecialchars($host) . ":" . htmlspecialchars((string)$port) . "</b></p>";
echo "<p>User: <b>" . htmlspecialchars($user) . "</b></p>";
echo "<p>DB_NAME dari env: <b>" . htmlspecialchars($requestedDb) . "</b></p>";
if (!$selectedDb) {
echo "<p style='color:red'><b>Gagal memilih database.</b></p>";
echo "<p>Database yang dicoba:</p><pre>" . htmlspecialchars(implode("\n", $selectErrors)) . "</pre>";
echo "<p>Solusi: di Coolify bagian <b>Production Environment Variables</b>, ubah <code>DB_NAME</code> menjadi nama database yang ada di ujung <b>MySQL URL internal</b>. Kalau URL internal berakhir dengan <code>/default</code>, isi <code>DB_NAME=default</code>.</p>";
exit;
}
echo "<p>Database yang dipakai: <b>" . htmlspecialchars($selectedDb) . "</b></p>";
$sqlFile = __DIR__ . '/database.sql';
if (!file_exists($sqlFile)) {
die("<p style='color:red'>File SQL tidak ditemukan: " . htmlspecialchars($sqlFile) . "</p>");
}
$sql = file_get_contents($sqlFile);
// Coolify normal user biasanya tidak butuh/ tidak punya izin CREATE DATABASE.
// Database sudah dibuat dari field Initial Database, jadi baris CREATE DATABASE dan USE diabaikan.
$sql = preg_replace('/CREATE\\s+DATABASE\\s+IF\\s+NOT\\s+EXISTS\\s+`?[^`\\s;]+`?.*?;/is', '', $sql);
$sql = preg_replace('/USE\\s+`?[^`\\s;]+`?\\s*;/is', '', $sql);
// Di Coolify, database sudah dibuat oleh resource database.
// Jadi dump tidak boleh memaksa CREATE DATABASE / USE database lain.
$sql = preg_replace('/CREATE\s+DATABASE\s+IF\s+NOT\s+EXISTS\s+`?[^`\s;]+`?.*?;/is', '', $sql);
$sql = preg_replace('/CREATE\s+DATABASE\s+`?[^`\s;]+`?.*?;/is', '', $sql);
$sql = preg_replace('/USE\s+`?[^`\s;]+`?\s*;/is', '', $sql);
// Jika dump hasil copy menjadi komentar seperti "-- 1.\nTABEL ... CREATE TABLE",
// buang label teks agar SQL tidak error.
$sql = preg_replace('/--\\s*\\d+\\.\\s*TABEL[^\\n]*\\n/is', '', $sql);
$sql = preg_replace('/\\bTABEL\\s+(PENGGUNA|RUMAH|BENCANA|DATA)[^;]*?(CREATE\\s+TABLE)/is', '$2', $sql);
// Supaya import ulang tidak langsung gagal karena tabel sudah ada.
$sql = preg_replace('/CREATE\s+TABLE\s+`/i', 'CREATE TABLE IF NOT EXISTS `', $sql);
$sql = preg_replace('/CREATE\s+TABLE\s+IF\s+NOT\s+EXISTS\s+IF\s+NOT\s+EXISTS\s+`/i', 'CREATE TABLE IF NOT EXISTS `', $sql);
if ($conn->multi_query($sql)) {
do {
@@ -46,7 +79,7 @@ if ($conn->multi_query($sql)) {
if ($conn->errno) {
echo "<p style='color:red'>Ada error saat import: " . htmlspecialchars($conn->error) . "</p>";
} else {
echo "<p style='color:green;font-weight:bold'>Database berhasil diimport.</p>";
echo "<p style='color:green;font-weight:bold'>Database berhasil diimport ke database <code>" . htmlspecialchars($selectedDb) . "</code>.</p>";
echo "<p>Setelah ini, hapus file <code>install_database.php</code> dari repo lalu redeploy.</p>";
}
} else {