View file db.php

File size: 1.86Kb
<?php
// Помощник для перенаправления
if (!function_exists('redirect_to_install')) {
    function redirect_to_install()
    {
        $isInApi = strpos($_SERVER['REQUEST_URI'], '/api/') !== false;
        $url = $isInApi ? '../install.php' : 'install.php';

        if (!headers_sent()) {
            header("Location: $url");
        } else {
            echo "<script>window.location.href='$url';</script>";
            echo "<meta http-equiv='refresh' content='0;url=$url'>";
        }
        exit;
    }
}

// Загрузка конфигурации, если она существует
if (file_exists(__DIR__ . '/config.php')) {
    require __DIR__ . '/config.php';
}

// Значения по умолчанию
$host = $db_host ?? 'localhost';
$db   = $db_name ?? 'chat';
$user = $db_user ?? 'root';
$pass = $db_pass ?? '';
$charset = 'utf8mb4';

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass, $options);

    // Проверка существования таблиц (верификация установки)
    if (basename($_SERVER['SCRIPT_NAME']) != 'install.php') {
        try {
            // Попытка выбрать данные из критически важной таблицы, чтобы убедиться, что установка завершена
            $pdo->query("SELECT 1 FROM users LIMIT 1");
        } catch (\PDOException $e) {
            redirect_to_install();
        }
    }
} catch (\PDOException $e) {
    // Ошибка подключения
    if (basename($_SERVER['SCRIPT_NAME']) != 'install.php') {
        redirect_to_install();
    }
}