49 lines
1.3 KiB
PHP
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);
|
|
}
|
|
}
|