# Логи игры от игроков (`v2/logs/*`)

Лаунчер отправляет `gamelog.txt` (+ `gamelog.prev.txt`) через `logs/create.php`. Файл сохраняется на VDS, строка — в `game_logs` (база лаунчера).

## Где лежат файлы

Папка выбирается в `v2/support/reports_logs.php → rl_logs_dir()`:

1. `RL_LOGS_DIR` в `v2/support/reports_logs_config.php` или переменная окружения `RL_LOGS_DIR` (php-fpm: `env[RL_LOGS_DIR] = /path`);
2. иначе `/var/www/logs` — **вне web-root** (используется, если папка существует и доступна PHP на запись) — рекомендуемый вариант;
3. иначе `<web-root>/logs` = `/var/www/html/logs` (создаётся автоматически вместе с `.htaccess` «Require all denied» и пустым `index.html`).

Имя файла: `<id>_<логин>_<YYYYMMDD_HHMMSS>.txt` (время сервера БД). В начале файла — шапка из строк `# …`
(логин, персонажи, сервер, описание игрока, автокатегория), затем `===== gamelog.prev.txt … =====` (если прислан) и `===== gamelog.txt =====`.

## Закрыть папку от HTTP (обязательно для варианта 3)

nginx (в `server { … }` сайта):

```nginx
location ^~ /logs/ { deny all; return 404; }
```

Apache (если `AllowOverride None` и `.htaccess` не читается):

```apache
<Directory "/var/www/html/logs">
    Require all denied
</Directory>
```

Скачивать логи можно только через админку (`admin-panel → Логи → Скачать лог`) или `logs/admin_download.php` (подписанная ссылка / пароль админа).

## Автокатегория

`classify.php` — чистая функция `rl_classify_log()` + CLI:

```sh
php classify.php /var/www/logs/12_login_20261008_120000.txt "игра вылетает"   # проверить один файл
php classify.php --reclassify          # пересчитать все незакрытые логи после изменения правил
php classify.php --reclassify --all    # пересчитать все
php classify_test.php                  # тесты правил (exit 0 = всё ок)
```

По HTTP `classify.php` и `classify_test.php` ничего не выполняют (404).
