1. Константы и переменные
Константы
- SED_CODE — Флаг безопасности, определяет что файл загружен через систему
- SED_ROOT — Корневая директория проекта
- SED_INDEX, SED_ADMIN, SED_PLUG — Флаги для различных режимов работы
Глобальные массивы
$cfg — Конфигурация системы
$cfg['mainurl'] // Главный URL сайта
$cfg['maintitle'] // Заголовок сайта
$cfg['defaultlang'] // Язык по умолчанию
$cfg['defaultskin'] // Шаблон по умолчанию
$cfg['mysqlhost'] // Хост БД
$cfg['mysqldb'] // Имя БД
// ... и множество других настроек
$sys — Системные переменные
$sys['now'] // Текущее время (timestamp)
$sys['now_offset'] // Время с учетом часового пояса
$sys['unique'] // Уникальный идентификатор
$sys['host'] // Имя хоста
$sys['abs_url'] // Абсолютный URL
$usr — Данные пользователя
$usr['id'] // ID пользователя (0 для гостя)
$usr['name'] // Имя пользователя
$usr['level'] // Уровень доступа
$usr['maingrp'] // Основная группа
$usr['auth'] // Массив прав доступа
$usr['skin'] // Текущий шаблон
$usr['lang'] // Текущий язык
$out — Данные для вывода
$out['subtitle'] // Подзаголовок страницы
$out['pagetitle'] // Заголовок страницы
$out['subdesc'] // Мета-описание
// ... и другие переменные для шаблонов
2. Подключение к базе данных
Система поддерживает два типа подключений:
- MySQL (system/database.mysql.php) — Устаревший, рекомендуется использовать MySQLi
- MySQLi (system/database.mysqli.php) — Рекомендуемый тип подключения
Тип подключения определяется в $cfg['sqldb'].
Основные функции работы с БД
// Подключение к базе данных
$connection_id = sed_sql_connect($host, $user, $password, $database);
// Выполнение SQL запроса
$sql = sed_sql_query("SELECT * FROM $db_users WHERE user_id='$id'");
// Получение ассоциативного массива (рекомендуется)
while ($row = sed_sql_fetchassoc($sql)) {
echo $row['user_name'];
}
// Получение массива с числовыми индексами
$row = sed_sql_fetcharray($sql);
echo $row[0]; // Первое поле
// Получение одного значения
$count = sed_sql_result($sql, 0, 'COUNT(*)');
// Количество строк в результате
$num_rows = sed_sql_numrows($sql);
// Экранирование строки для безопасности (ОБЯЗАТЕЛЬНО!)
$safe_string = sed_sql_prep($user_input);
$sql = sed_sql_query("SELECT * FROM $db_table WHERE title='$safe_string'");
// ID последней вставленной записи
$new_id = sed_sql_insertid();
Важные замечания по безопасности
⚠️ КРИТИЧЕСКИ ВАЖНО: Всегда экранируйте пользовательский ввод перед использованием в SQL запросах:
// ❌ НЕПРАВИЛЬНО - уязвимость к SQL-инъекциям
$title = $_GET['title'];
$sql = sed_sql_query("SELECT * FROM $db_pages WHERE page_title='$title'");
// ✅ ПРАВИЛЬНО - безопасно
$title = sed_sql_prep(sed_import('title', 'G', 'TXT'));
$sql = sed_sql_query("SELECT * FROM $db_pages WHERE page_title='$title'");
Пример работы с транзакциями
// Начало транзакции (если поддерживается)
sed_sql_query("START TRANSACTION");
try {
// Выполнение операций
sed_sql_query("INSERT INTO $db_table1 (...) VALUES (...)");
sed_sql_query("UPDATE $db_table2 SET ... WHERE ...");
// Подтверждение транзакции
sed_sql_query("COMMIT");
} catch (Exception $e) {
// Откат при ошибке
sed_sql_query("ROLLBACK");
}
3. Аутентификация и авторизация
Режимы аутентификации ($cfg['authmode'])
Система поддерживает три режима аутентификации:
- 1 — Только cookies: Пользовательская сессия хранится только в cookies. Менее безопасно.
- 2 — Только sessions: Сессия хранится только на сервере. Более безопасно, но требует активных PHP сессий.
- 3 — Cookies + Sessions (рекомендуется): Комбинация обоих методов для максимальной безопасности и удобства.
// Настройка в datas/config.php
$cfg['authmode'] = 3; // Рекомендуемое значение
Система прав доступа
Функция sed_auth($area, $option, $level) проверяет права доступа:
Параметры:
- $area — Область (например, 'index', 'page', 'forums', 'plug')
- $option — Опция проверки:
- 'R' — Чтение (Read)
- 'W' — Запись/редактирование (Write)
- 'A' — Администрирование (Admin)
- Можно комбинировать: 'RW', 'RWA'
- $level — Минимальный уровень доступа (например, 'A' для админов)
Возвращает: массив [$auth_read, $auth_write, $isadmin]
Примеры использования:
// Проверка прав на чтение и запись для модуля 'page'
list($usr['auth_read'], $usr['auth_write'], $usr['isadmin']) = sed_auth('page', 'RW');
// Проверка только прав чтения
list($read, $write, $admin) = sed_auth('forums', 'R');
// Проверка прав админа
list($read, $write, $is_admin) = sed_auth('admin', 'A');
// Проверка прав с минимальным уровнем
list($read, $write, $admin) = sed_auth('plug', 'RWA', 'A'); // Только для админов
// Условная проверка прав
if ($usr['auth_read']) {
// Показать контент
}
if ($usr['auth_write']) {
// Показать форму редактирования
}
if ($usr['isadmin']) {
// Показать административные функции
}
// Блокировка доступа если нет прав
if (!$usr['auth_read']) {
sed_block();
// или
sed_redirect(sed_url("message", "msg=403"));
exit;
}
Структура прав доступа
Права хранятся в массиве $usr['auth'], который имеет структуру:
$usr['auth'] = array(
'area_name' => array(
'R' => 1, // Право на чтение
'W' => 1, // Право на запись
'A' => 0 // Право на администрирование
),
// ... другие области
);
Группы пользователей
Система использует иерархию групп с различными уровнями доступа:
// Группы загружаются в глобальный массив $sed_groups
// Структура группы:
$sed_groups[$grp_id] = array(
'id' => $grp_id, // ID группы
'alias' => 'members', // Алиас группы
'level' => 5, // Уровень доступа (чем выше, тем больше прав)
'title' => 'Members', // Название группы
'desc' => 'Regular members', // Описание
'pfs_maxfile' => 1000000, // Макс. размер файла в PFS
'pfs_maxtotal' => 50000000 // Макс. общий размер PFS
);
// Проверка группы пользователя
if ($usr['maingrp'] == 5) {
// Пользователь является членом группы с ID 5
}
// Получение информации о группе
$group_info = $sed_groups[$usr['maingrp']];
$user_level = $group_info['level'];
Предопределенные группы (обычно):
- 0 — Гости (Guests) — level 0
- 3 — Члены (Members) — level 5
- 4 — Модераторы (Moderators) — level 25
- 5 — Администраторы (Administrators) — level 99
⚠️ Примечание: ID групп могут отличаться в зависимости от настроек сайта. Всегда проверяйте через $sed_groups, а не жестко задавайте ID.
4. Кэширование
Система кэширования используется для оптимизации производительности и хранения часто используемых данных.
Что кэшируется
- Группы пользователей (sed_groups) — TTL: 3600 сек (1 час)
- Плагины (sed_plugins) — TTL: 3300 сек (55 минут)
- Структура страниц (sed_cat) — TTL: 3600 сек
- Структура форумов (sed_forums_str) — TTL: 3600 сек
- Смайлики (sed_smilies) — TTL: 3550 сек
- Словари (sed_dic) — TTL: 3600 сек
- Меню (sed_menu) — TTL: 3600 сек
Функции кэширования
// Сохранение данных в кэш
// $name - имя кэша
// $data - данные для сохранения (массив, объект, строка)
// $ttl - время жизни в секундах (time to live)
sed_cache_store('my_cache_name', $data_array, 3600);
// Получение одного элемента из кэша
$cached_data = sed_cache_get('my_cache_name', true); // true = проверять срок действия
// Получение всего кэша (используется в common.php)
$all_cache = sed_cache_getall();
// Очистка конкретного кэша
sed_cache_clear('my_cache_name');
// Очистка всего кэша
sed_cache_clearall();
Практические примеры
// Кэширование результатов запроса
$cache_name = 'popular_pages';
$data = sed_cache_get($cache_name);
if (!$data) {
// Данных нет в кэше, выполняем запрос
$sql = sed_sql_query("SELECT * FROM $db_pages WHERE page_state=1 ORDER BY page_count DESC LIMIT 10");
$data = array();
while ($row = sed_sql_fetchassoc($sql)) {
$data[] = $row;
}
// Сохраняем в кэш на 1 час
sed_cache_store($cache_name, $data, 3600);
}
// Используем данные из кэша или БД
foreach ($data as $page) {
// ...
}
// Кэширование сгенерированного HTML
$html_cache = 'header_html_' . $usr['lang'] . '_' . $usr['skin'];
$html = sed_cache_get($html_cache);
if (!$html) {
// Генерируем HTML
$html = sed_generate_header_html();
// Кэшируем на 30 минут
sed_cache_store($html_cache, $html, 1800);
}
echo $html;
Рекомендации по использованию кэша
✅ Используйте кэш для:
- Результатов тяжелых SQL запросов
- Данных, которые редко изменяются
- Сгенерированного HTML/контента
❌ Не используйте кэш для:
- Персональных данных пользователя
- Временных данных (сессии, токены)
- Данных, требующих мгновенного обновления
⚠️ Важно: При изменении данных в БД обязательно очищайте соответствующий кэш, иначе пользователи будут видеть устаревшую информацию.

Комментарии: (0)