Files
D1041231009-WebGIS-SPBU/docker/wait-for-database.php
T
2026-06-11 14:53:35 +07:00

49 lines
1.3 KiB
PHP

<?php
function env_value(string $key, string $default = ''): string
{
$value = getenv($key);
if ($value !== false && $value !== '') {
return $value;
}
static $fileVars = null;
if ($fileVars === null) {
$fileVars = is_file(__DIR__.'/../.env')
? parse_ini_file(__DIR__.'/../.env', false, INI_SCANNER_RAW)
: [];
}
return isset($fileVars[$key]) && $fileVars[$key] !== ''
? (string) $fileVars[$key]
: $default;
}
$host = env_value('DB_HOST', '127.0.0.1');
$port = env_value('DB_PORT', '3306');
$database = env_value('DB_DATABASE', 'spbu_baru');
$username = env_value('DB_USERNAME', 'root');
$password = env_value('DB_PASSWORD', '');
$dsn = "mysql:host={$host};port={$port};dbname={$database};charset=utf8mb4";
echo "Waiting for database at {$host}:{$port}...\n";
for ($attempt = 1; $attempt <= 30; $attempt++) {
try {
new PDO($dsn, $username, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_TIMEOUT => 3,
]);
echo "Database connection OK.\n";
exit(0);
} catch (PDOException $exception) {
if ($attempt === 30) {
fwrite(STDERR, "Database unreachable after 30 attempts: {$exception->getMessage()}\n");
exit(1);
}
sleep(2);
}
}