Fatal error: Cannot redeclare Хелпу пж

Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
Пользователь
Регистрация
15 Авг 2025
Сообщения
4
Доброго времени суток.
В логах такая ошибка:
log:
[B]Fatal error[/B]: Cannot redeclare get_db_connection() (previously declared in /var/www/ws331/data/www/домен/global/general/config.php:23) in [B]/var/www/ws331/data/www/домен/global/general/config.php[/B] on line [B]23[/B]
Содержание config.php:
config.php:
<?php
ini_set('session.gc_maxlifetime', 2560000);
session_set_cookie_params([
    'lifetime' => 2560000,
    'path'     => '/',
    'domain'   => 'https://www.домен.ru',
    'secure'   => isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on',
    'httponly' => true,
    'samesite' => 'ччччччччч'
]);
session_start();

// коннект к базе
$db_host     = "ччччччччч";
$db_user     = "ччччччччч";
$db_password = "ччччччч";
$db_name     = "чччччччч";

$sitename = "чччччччч";
$botToken = ""; // токен ТГ бота
$chatId = "";

function get_db_connection() {
    static $conn = null;
    if ($conn === null) {
        try {
            $dsn = "mysql:host={$GLOBALS['db_host']};dbname={$GLOBALS['db_name']};charset=utf8mb4";
            $options = [
                PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES   => false,
            ];
            $conn = new PDO($dsn, $GLOBALS['db_user'], $GLOBALS['db_password'], $options);
        } catch (PDOException $e) {
            error_log("PDOException: " . $e->getMessage() );
            die(json_encode(["error" => "Ошибка подключения: " . $e->getMessage()]));
        }
    }
    return $conn;
}
function sanitize_input($data) {
    return htmlspecialchars(strip_tags(trim($data)), ENT_QUOTES, 'UTF-8');
}
$allowed_pages = ['login.php', 'register.php', 'bot.php'];
$excluded_dirs = ['global'];
$current_page = basename($_SERVER['PHP_SELF']);
$current_dir  = basename(dirname($_SERVER['PHP_SELF']));
if (in_array($current_dir, $excluded_dirs)) {
    return;
}
$conn = get_db_connection();
if (!isset($_SESSION['user_id']) && isset($_COOKIE['session_token'])) {
    $session_token = sanitize_input($_COOKIE['session_token']);
  
    $stmt = $conn->prepare("SELECT user_id FROM user_sessions WHERE session_token = ? AND expires_at > NOW()");
    $stmt->execute([$session_token]);
    $user = $stmt->fetch();
    if ($user) {
        $_SESSION['user_id'] = $user['user_id'];
        session_regenerate_id(true);
    } else {
        setcookie("session_token", "", time() - 3600, "/", "", isset($_SERVER['HTTPS']), true);
    }
}
if (isset($_SESSION['user_id'])) {
    $stmt = $conn->prepare("SELECT admin, first_name, last_name, email FROM users WHERE id = :id");
    $stmt->execute([':id' => $_SESSION['user_id']]);
    $user_data = $stmt->fetch();
    if ($user_data) {
        $_SESSION['admin']      = $user_data['admin'];
        $_SESSION['first_name'] = $user_data['first_name'];
        $_SESSION['last_name']  = $user_data['last_name'];
        $_SESSION['email']      = $user_data['email'];
    }
}
if (!isset($_SESSION['user_id']) && !in_array($current_page, $allowed_pages)) {
    if (!headers_sent()) {
        header("Location: login.php");
        exit();
    } else {
        die("<script>window.location.href = 'login.php';</script>");
    }
}
function is_rate_limited() {
    $now = time();
    if (!isset($_SESSION['requests'])) {
        $_SESSION['requests'] = [];
    }
    $_SESSION['requests'] = array_filter($_SESSION['requests'], function($t) use ($now) {
        return ($now - $t) < 60;
    });
    if (count($_SESSION['requests']) >= 50) {
        return true;
    }
    $_SESSION['requests'][] = $now;
    return false;
}
if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['query'])) {
    header('Content-Type: application/json');
    if (is_rate_limited()) {
        echo json_encode(["error" => "Слишком много запросов, попробуйте позже."]);
    } else {
        echo json_encode(["message" => "Запрос получен, но обработка не реализована."]);
    }
    exit;
}
?>
 
Решение
/offtop
Доброго времени суток.
В логах такая ошибка:
log:
[B]Fatal error[/B]: Cannot redeclare get_db_connection() (previously declared in /var/www/ws331/data/www/домен/global/general/config.php:23) in [B]/var/www/ws331/data/www/домен/global/general/config.php[/B] on line [B]23[/B]
Содержание config.php:
config.php:
<?php
ini_set('session.gc_maxlifetime', 2560000);
session_set_cookie_params([
    'lifetime' => 2560000,
    'path'     => '/',
    'domain'   => 'https://www.домен.ru',
    'secure'   => isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on',
    'httponly' => true,
    'samesite' => 'ччччччччч'
]);
session_start();

// коннект к базе
$db_host     = "ччччччччч";
$db_user     = "ччччччччч";
$db_password = "ччччччч";
$db_name     =...
Пользователь
Регистрация
22 Июн 2025
Сообщения
44
2.20. Запрещено публиковать ответы, сгенерированные при помощи ChatGPT или аналогичных ИИ-моделей.
/offtop
Доброго времени суток.
В логах такая ошибка:
log:
[B]Fatal error[/B]: Cannot redeclare get_db_connection() (previously declared in /var/www/ws331/data/www/домен/global/general/config.php:23) in [B]/var/www/ws331/data/www/домен/global/general/config.php[/B] on line [B]23[/B]
Содержание config.php:
config.php:
<?php
ini_set('session.gc_maxlifetime', 2560000);
session_set_cookie_params([
    'lifetime' => 2560000,
    'path'     => '/',
    'domain'   => 'https://www.домен.ru',
    'secure'   => isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on',
    'httponly' => true,
    'samesite' => 'ччччччччч'
]);
session_start();

// коннект к базе
$db_host     = "ччччччччч";
$db_user     = "ччччччччч";
$db_password = "ччччччч";
$db_name     = "чччччччч";

$sitename = "чччччччч";
$botToken = ""; // токен ТГ бота
$chatId = "";

function get_db_connection() {
    static $conn = null;
    if ($conn === null) {
        try {
            $dsn = "mysql:host={$GLOBALS['db_host']};dbname={$GLOBALS['db_name']};charset=utf8mb4";
            $options = [
                PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES   => false,
            ];
            $conn = new PDO($dsn, $GLOBALS['db_user'], $GLOBALS['db_password'], $options);
        } catch (PDOException $e) {
            error_log("PDOException: " . $e->getMessage() );
            die(json_encode(["error" => "Ошибка подключения: " . $e->getMessage()]));
        }
    }
    return $conn;
}
function sanitize_input($data) {
    return htmlspecialchars(strip_tags(trim($data)), ENT_QUOTES, 'UTF-8');
}
$allowed_pages = ['login.php', 'register.php', 'bot.php'];
$excluded_dirs = ['global'];
$current_page = basename($_SERVER['PHP_SELF']);
$current_dir  = basename(dirname($_SERVER['PHP_SELF']));
if (in_array($current_dir, $excluded_dirs)) {
    return;
}
$conn = get_db_connection();
if (!isset($_SESSION['user_id']) && isset($_COOKIE['session_token'])) {
    $session_token = sanitize_input($_COOKIE['session_token']);
 
    $stmt = $conn->prepare("SELECT user_id FROM user_sessions WHERE session_token = ? AND expires_at > NOW()");
    $stmt->execute([$session_token]);
    $user = $stmt->fetch();
    if ($user) {
        $_SESSION['user_id'] = $user['user_id'];
        session_regenerate_id(true);
    } else {
        setcookie("session_token", "", time() - 3600, "/", "", isset($_SERVER['HTTPS']), true);
    }
}
if (isset($_SESSION['user_id'])) {
    $stmt = $conn->prepare("SELECT admin, first_name, last_name, email FROM users WHERE id = :id");
    $stmt->execute([':id' => $_SESSION['user_id']]);
    $user_data = $stmt->fetch();
    if ($user_data) {
        $_SESSION['admin']      = $user_data['admin'];
        $_SESSION['first_name'] = $user_data['first_name'];
        $_SESSION['last_name']  = $user_data['last_name'];
        $_SESSION['email']      = $user_data['email'];
    }
}
if (!isset($_SESSION['user_id']) && !in_array($current_page, $allowed_pages)) {
    if (!headers_sent()) {
        header("Location: login.php");
        exit();
    } else {
        die("<script>window.location.href = 'login.php';</script>");
    }
}
function is_rate_limited() {
    $now = time();
    if (!isset($_SESSION['requests'])) {
        $_SESSION['requests'] = [];
    }
    $_SESSION['requests'] = array_filter($_SESSION['requests'], function($t) use ($now) {
        return ($now - $t) < 60;
    });
    if (count($_SESSION['requests']) >= 50) {
        return true;
    }
    $_SESSION['requests'][] = $now;
    return false;
}
if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['query'])) {
    header('Content-Type: application/json');
    if (is_rate_limited()) {
        echo json_encode(["error" => "Слишком много запросов, попробуйте позже."]);
    } else {
        echo json_encode(["message" => "Запрос получен, но обработка не реализована."]);
    }
    exit;
}
?>
Ошибка, которую вы видите, возникает из-за повторного объявления функции get_db_connection() . Это происходит потому, что функция уже была объявлена ранее в файле config.php на строке 23.
Чтобы исправить эту ошибку, убедитесь, что функция get_db_connection() объявляется только один раз. Вот как можно исправить ваш код:
1. Проверьте, что функция get_db_connection() объявлена только в одном месте в файле config.php .
2. Убедитесь, что файл config.php не включается дважды.
Пример правильного объявления функции:

PHP:
<?php
ini_set('session.gc_maxlifetime', 2560000);
session_set_cookie_params([
'lifetime' => 2560000,
'path' => '/',
'domain' => 'https://www.домен.ru',
'secure' => isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on',
'httponly' => true,
'samesite' => 'ччччччччч'
]);
session_start();

// Коннект к базе
$db_host = "ччччччччч";
$db_user = "ччччччччч";
$db_password = "ччччччч";
$db_name = "чччччччч";

$sitename = "чччччччч";
$botToken = ""; // Токен ТГ бота
$chatId = "";

function get_db_connection() {
static $conn = null;
if ($conn === null) {
try {
$dsn = "mysql:host={$GLOBALS['db_host']};dbname={$GLOBALS['db_name']};charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$conn = new PDO($dsn, $GLOBALS['db_user'], $GLOBALS['db_password'], $options);
} catch (PDOException $e) {
error_log("PDOException: ". $e->getMessage());
die(json_encode(["error" => "Ошибка подключения: ". $e->getMessage()]));
}
}
return $conn;
}

function sanitize_input($data) {
return htmlspecialchars(strip_tags(trim($data)), ENT_QUOTES, 'UTF-8');
}

$allowed_pages = ['login.php', 'register.php', 'bot.php'];
$excluded_dirs = ['global'];
$current_page = basename($_SERVER['PHP_SELF']);
$current_dir = basename(dirname($_SERVER['PHP_SELF']));

if (in_array($current_dir, $excluded_dirs)) {
return;
}

$conn = get_db_connection();

// Остальной код...

Убедитесь, что функция get_db_connection() вызывается только после её объявления и что файл config.php не включается повторно.
 
Последнее редактирование модератором:
Arch Linux - The best!
Активный
Регистрация
17 Июн 2025
Сообщения
305
/offtop

Ошибка, которую вы видите, возникает из-за повторного объявления функции get_db_connection() . Это происходит потому, что функция уже была объявлена ранее в файле config.php на строке 23.
Чтобы исправить эту ошибку, убедитесь, что функция get_db_connection() объявляется только один раз. Вот как можно исправить ваш код:
1. Проверьте, что функция get_db_connection() объявлена только в одном месте в файле config.php .
2. Убедитесь, что файл config.php не включается дважды.
Пример правильного объявления функции:

<?php
ini_set('session.gc_maxlifetime', 2560000);
session_set_cookie_params([
'lifetime' => 2560000,
'path' => '/',
'domain' => 'https://www.домен.ru',
'secure' => isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on',
'httponly' => true,
'samesite' => 'ччччччччч'
]);
session_start();

// Коннект к базе
$db_host = "ччччччччч";
$db_user = "ччччччччч";
$db_password = "ччччччч";
$db_name = "чччччччч";

$sitename = "чччччччч";
$botToken = ""; // Токен ТГ бота
$chatId = "";

function get_db_connection() {
static $conn = null;
if ($conn === null) {
try {
$dsn = "mysql:host={$GLOBALS['db_host']};dbname={$GLOBALS['db_name']};charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$conn = new PDO($dsn, $GLOBALS['db_user'], $GLOBALS['db_password'], $options);
} catch (PDOException $e) {
error_log("PDOException: ". $e->getMessage());
die(json_encode(["error" => "Ошибка подключения: ". $e->getMessage()]));
}
}
return $conn;
}

function sanitize_input($data) {
return htmlspecialchars(strip_tags(trim($data)), ENT_QUOTES, 'UTF-8');
}

$allowed_pages = ['login.php', 'register.php', 'bot.php'];
$excluded_dirs = ['global'];
$current_page = basename($_SERVER['PHP_SELF']);
$current_dir = basename(dirname($_SERVER['PHP_SELF']));

if (in_array($current_dir, $excluded_dirs)) {
return;
}

$conn = get_db_connection();

// Остальной код...

Убедитесь, что функция get_db_connection() вызывается только после её объявления и что файл config.php не включается повторно.
2.20. Запрещено публиковать ответы, сгенерированные при помощи ChatGPT или аналогичных ИИ-моделей.

молодец гпт кодер, лучше дай знающим людям ответить
 
Пользователь
Регистрация
22 Июн 2025
Сообщения
44
2.20. Запрещено публиковать ответы, сгенерированные при помощи ChatGPT или аналогичных ИИ-моделей.

молодец гпт кодер, лучше дай знающим людям ответить
Даже если я правила этого не знал да!?
 
𝚖𝚘𝚛𝚜 𝚌𝚎𝚛𝚝𝚊, 𝚑𝚘𝚛𝚊 𝚒𝚗𝚌𝚎𝚛𝚝𝚊.
Команда форума
Администратор
Регистрация
21 Янв 2023
Сообщения
1,316

Вложения

  • IMG_0009.png
    IMG_0009.png
    269.1 KB · Просмотры: 12
  • IMG_0010.png
    IMG_0010.png
    539.1 KB · Просмотры: 12
Пользователь
Регистрация
22 Июн 2025
Сообщения
44
Сверху