Пользователь
- Регистрация
- 15 Авг 2025
- Сообщения
- 4
- Автор темы
- #1
Доброго времени суток.
В логах такая ошибка:
Содержание config.php:
В логах такая ошибка:
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:
<?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;
}
?>