Почему не работают логи?
У меня такая проблема, делал все по ролику - https://youtu.be/hwgxDHgML7A и пишет ошибку постоянно - https://logi.arz-avondale.ru
Fatal error: Uncaught Error: Undefined constant "hash" in /var/www/u2387962/data/www/logi.arz-avondale.ru/inc/header.php:15 Stack trace: #0 /var/www/u2387962/data/www/logi.arz-avondale.ru/upload/index.php(22): include() #1 {main} thrown in /var/www/u2387962/data/www/logi.arz-avondale.ru/inc/header.php on line 15
Код header.php
<?php include 'config.php'; $base_logs = new mysqli(Config::DB_HOST_LOG, Config::DB_USER_LOG, Config::DB_PASS_LOG, Config::DB_NAME_LOG) or die("Ошибка BD #2!"); $base_logs -> query("SET character_set_results = utf8"); $base_logs -> query("SET NAMES 'utf8'"); $TABLE_LOG = Config::DB_LOG_TABLE; $base_server = new mysqli(Config::DB_HOST_SERVER, Config::DB_USER_SERVER, Config::DB_PASS_SERVER, Config::DB_NAME_SERVER) or die("Ошибка BD #1!"); $base_server -> query("SET character_set_results = utf8"); $base_server -> query("SET NAMES 'utf8'"); if (isset($_COOKIE[hash])) { $result = $base_logs -> query("SELECT user_id FROM coookie WHERE hash = '".$_COOKIE[hash]."' LIMIT 1; "); $data = mysqli_fetch_array($result); $sql = "SELECT * FROM user WHERE id = '".$data[user_id]."' LIMIT 1;"; $result -> close(); $result = $base_logs -> query($sql); $cookie = mysqli_fetch_assoc($result); $result -> close(); $ip = explode( (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ':') == true ? ':':'.' ), $_SERVER['HTTP_X_FORWARDED_FOR'] ); $cookie[ip] = $ip[0].'^'.$ip[1].'^'.$ip[2]; $sign = hash('sha512', implode ( '|', $cookie ), false); if ($sign !== $_COOKIE[hash]) { $base_logs -> query("DELETE FROM coookie WHERE hash = '".$_COOKIE[hash]."'"); setcookie("hash", "", time() - 30, "/", "", 1); unset($_SESSION['account_log_name']); unset($_SESSION['account_log_password']); session_destroy(); header('Location: ../check/authorization'); die(); } } else { $user = $_SESSION["account_log_name"]; $password = $_SESSION["account_log_password"]; $sql = "SELECT * FROM user WHERE login = '".$user."' AND password = '".$password."'"; } $query = $base_logs -> query($sql); $row = mysqli_num_rows($query); $data = mysqli_fetch_assoc($query); $subscription = $data['sub']; if (!$row && $_SERVER['SCRIPT_NAME'] !== '/check/authorization') { unset($_SESSION['account_log_name']); unset($_SESSION['account_log_password']); session_destroy(); header('Location: ../check/authorization'); die(); } else if (!$data[status]) { die('<html><head><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"></head></html><center><b>Внимание ошибка авторизации:<br />Ваш аккаунт проходит модерацию</b><br /><a href = ../check/authorization>Вернуться на раздел авторизации</a></center>'); return false; } $query -> close(); $query = $base_logs -> query('SELECT * FROM `settings`'); $server = mysqli_fetch_assoc($query); if (!$server[status]) { include '../404/close.php'; die(); return false; } else if ($row && $subscription < time() && $_SERVER['SCRIPT_NAME'] !== '/pages/subscription.php') { header('Location: ../pages/subscription'); die(); } ?> |
<?php include 'config.php'; $base_logs = new mysqli(Config::DB_HOST_LOG, Config::DB_USER_LOG, Config::DB_PASS_LOG, Config::DB_NAME_LOG) or die("Ошибка BD #2!"); $base_logs -> query("SET character_set_results = utf8"); $base_logs -> query("SET NAMES 'utf8'"); $TABLE_LOG = Config::DB_LOG_TABLE; $base_server = new mysqli(Config::DB_HOST_SERVER, Config::DB_USER_SERVER, Config::DB_PASS_SERVER, Config::DB_NAME_SERVER) or die("Ошибка BD #1!"); $base_server -> query("SET character_set_results = utf8"); $base_server -> query("SET NAMES 'utf8'"); if (isset($_COOKIE[hash])) { $result = $base_logs -> query("SELECT user_id FROM coookie WHERE hash = '".$_COOKIE[hash]."' LIMIT 1; "); $data = mysqli_fetch_array($result); $sql = "SELECT * FROM user WHERE id = '".$data[user_id]."' LIMIT 1;"; $result -> close(); $result = $base_logs -> query($sql); $cookie = mysqli_fetch_assoc($result); $result -> close(); $ip = explode( (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ':') == true ? ':':'.' ), $_SERVER['HTTP_X_FORWARDED_FOR'] ); $cookie[ip] = $ip[0].'^'.$ip[1].'^'.$ip[2]; $sign = hash('sha512', implode ( '|', $cookie ), false); if ($sign !== $_COOKIE[hash]) { $base_logs -> query("DELETE FROM coookie WHERE hash = '".$_COOKIE[hash]."'"); setcookie("hash", "", time() - 30, "/", "", 1); unset($_SESSION['account_log_name']); unset($_SESSION['account_log_password']); session_destroy(); header('Location: ../check/authorization'); die(); } } else { $user = $_SESSION["account_log_name"]; $password = $_SESSION["account_log_password"]; $sql = "SELECT * FROM user WHERE login = '".$user."' AND password = '".$password."'"; } $query = $base_logs -> query($sql); $row = mysqli_num_rows($query); $data = mysqli_fetch_assoc($query); $subscription = $data['sub']; if (!$row && $_SERVER['SCRIPT_NAME'] !== '/check/authorization') { unset($_SESSION['account_log_name']); unset($_SESSION['account_log_password']); session_destroy(); header('Location: ../check/authorization'); die(); } else if (!$data[status]) { die('<html><head><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"></head></html><center><b>Внимание ошибка авторизации:<br />Ваш аккаунт проходит модерацию</b><br /><a href = ../check/authorization>Вернуться на раздел авторизации</a></center>'); return false; } $query -> close(); $query = $base_logs -> query('SELECT * FROM `settings`'); $server = mysqli_fetch_assoc($query); if (!$server[status]) { include '../404/close.php'; die(); return false; } else if ($row && $subscription < time() && $_SERVER['SCRIPT_NAME'] !== '/pages/subscription.php') { header('Location: ../pages/subscription'); die(); } ?>
В чем может быть проблема?
Дополнительно:
Дыра в безопасности. Достаточно в $_COOKIE['hash'] передать 1 or 1 = 1 и можно разлогинить всех пользователей.
-$_COOKIE[hash] +$_COOKIE['hash'] |
-$_COOKIE[hash] +$_COOKIE['hash']
И далее по тексту, где идёт обращение к элементам ассоциативного массива, сделать то же самое.
- Сделал, теперь пишет
Warning: Undefined array key "account_log_name" in /var/www/u2387962/data/www/logi.arz-avondale.ru/inc/header.php on line 50
Warning: Undefined array key "account_log_password" in /var/www/u2387962/data/www/logi.arz-avondale.ru/inc/header.php on line 51
Warning: Trying to access array offset on value of type null in /var/www/u2387962/data/www/logi.arz-avondale.ru/inc/header.php on line 61
Warning: Cannot modify header information - headers already sent by (output started at /var/www/u2387962/data/www/logi.arz-avondale.ru/inc/header.php:50) in /var/www/u2387962/data/www/logi.arz-avondale.ru/inc/header.php on line 68
- Это элементарные ошибки, с которыми сталкивается каждый начинающий. Забейте их в поисковик и выбирайте любой из тысяч ответов.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема с неработающими логами может иметь несколько причин, и для их решения необходимо провести некоторые действия.
1. Проверьте настройки логирования в вашем приложении. Убедитесь, что уровень логирования установлен правильно. Например, если у вас установлен уровень логирования на INFO, то сообщения с уровнем DEBUG не будут записываться в лог.
define('LOG_LEVEL', 'DEBUG');
2. Проверьте разрешения на запись в файлы логов. У вас должны быть правильные разрешения на запись в файлы логов, чтобы ваше приложение могло записывать сообщения в них.
3. Убедитесь, что путь к файлу лога указан правильно. Проверьте, что путь к файлу лога в настройках вашего приложения указан корректно.
define('LOG_FILE', '/var/log/myapp.log');
4. Проверьте наличие необходимых библиотек для логирования. Убедитесь, что вы используете правильную библиотеку для логирования и она установлена в вашем приложении.
5. Проверьте, что сама функция логирования работает правильно. Проверьте код, который вызывает функцию логирования, и убедитесь, что он корректно передает сообщение для записи в лог.
6. Попробуйте добавить дополнительный вывод информации для отладки. Добавьте дополнительные сообщения логирования для отслеживания того, в каком месте вашего приложения возникает проблема.
Если после выполнения всех этих шагов логи все равно не работают, то возможно проблема кроется в другом месте, и вам стоит обратиться за помощью к специалистам или сообществу разработчиков для более детального анализа проблемы.