Cómo arranca Risus Nova
Recorrido exacto desde index.php hasta la selección del controlador del módulo.
Resumen del arranque
El archivo index.php comienza cargando header.php. Solo después obtiene la acción solicitada y selecciona el módulo que debe ejecutarse.
require_once 'header.php';
$action = $_GET['action'] ?? ($_GET['do'] ?? 'home');Paso 1: protección contra doble carga
header.php comprueba TS_HEADER. Si ya está definida, termina inmediatamente. Esto evita inicializar dos veces clases, sesión y variables globales.
Paso 2: rutas del sistema
Se define TS_ROOT y, más adelante, las rutas constantes:
TS_CLASS: clases del núcleo.TS_EXTRA: funciones y librerías auxiliares.TS_FILES: archivos generados o subidos.
Paso 3: seguridad y sesión
Antes de crear objetos, el sistema:
- envía cabeceras defensivas;
- activa HSTS cuando la petición usa HTTPS;
- inicia una sesión con cookies
HttpOnly,Securecuando corresponde ySameSite=Lax; - activa el modo estricto de sesiones.
Paso 4: configuración e instalación
Se carga config.inc.php. Cuando el host conserva el valor inicial dbhost, el sistema redirige al instalador.
if (isset($db['hostname']) && $db['hostname'] === 'dbhost') {
header('Location: ./install/index.php');
exit;
}Paso 5: funciones y clases base
Se cargan las funciones globales y las clases necesarias en todas las páginas: núcleo, usuario, monitor, actividad, mensajes, Smarty y manejo de query strings.
Paso 6: limpieza de entrada
cleanRequest() se ejecuta antes de construir los objetos principales. Esta posición es importante: las capas posteriores trabajan con la petición ya normalizada.
Paso 7: objetos principales
El arranque crea:
$tsCore = new tsCore();
$tsUser = new tsUser();
$tsMonitor = new tsMonitor();
$tsActividad = new tsActividad();
$tsMP = new tsMensajes();tsCore obtiene la configuración de la base de datos, categorías, tema, noticias y datos de moderación. tsUser crea o recupera la sesión y carga al usuario autenticado.
Paso 8: tema y Smarty
El tema activo se obtiene desde $tsCore->settings['tema']['t_path']. Después se instancia tsSmarty y se asignan al motor datos globales como configuración, usuario, avisos, notificaciones, mensajes, estadísticas y token CSRF.
Paso 9: controles tempranos
Antes de entrar al módulo solicitado, header.php comprueba:
- IP incluida en la lista negra;
- modo sin conexión;
- suspensión del usuario.
Estos controles pueden terminar la petición antes de ejecutar el controlador.
Paso 10: selección de acción
Al regresar a index.php, un switch selecciona el controlador. La acción predeterminada es home, que carga inc/php/posts.php.
Siguiente paso
Continúa con Flujo de una petición.