LilaPHP

Configuration & Environment (`.env`)

Settings in the root .env file control the framework's behavior globally. Under our architecture, no monolithic App instantiation is required—all configuration properties are parsed into static memory upon boot via Core\Config (`_core/Config.php`). In production, running php cli.php optimize pre-compiles these settings directly into an OPcache-ready PHP array (`_core/cache/env.php`) for zero runtime parsing overhead.

# Application Profile & Ports
APP_NAME=LilaPHP
APP_ENV=production
APP_DEBUG=false
APP_URL=http://localhost:8080
HTTP_PORT=8080
PROD_HTTP_PORT=80

# Multi-Driver Database (Default: MySQL | Optional: SQLite)
DB_TYPE=mysql
DB_HOST=mysql
DB_PORT=3306
DB_NAME=lilaphp
DB_USER=root
DB_PASSWORD=secret
# For SQLite:
# DB_TYPE=sqlite
# DB_FILE=app/database/app.sqlite

# Dual-Tier Cache & Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
CACHE_DRIVER=auto          # Tiered: APCu -> Redis -> File
DB_CACHE_DRIVER=file

# Universal AI Engine Configuration
AI_PROVIDER=deepseek
API_IA_KEY=
OPENAI_API_KEY=
GEMINI_API_KEY=
DEEPSEEK_API_KEY=
ANTHROPIC_API_KEY=
OLLAMA_BASE_URL=http://localhost:11434

# Security & DDoS Protection
APP_KEY="base64:..."       # Generated via: php cli.php key:generate
CORS_ALLOWED_ORIGINS=*
RATE_LIMIT=200
RATE_LIMIT_WINDOW=60
LOG_ENABLED=false
DEBUG_LOGGING_ENABLED=false

Direct Execution Architecture

In traditional PHP frameworks, developers instantiate a monolithic object like new App(['security' => ...]) on every single HTTP request. This approach creates unnecessary CPU allocation, redundant configuration parsing, and dependency injection overhead.

LilaPHP's Paradigm: When Nginx dispatches a request (`/api/ping` or `/about`) to `public/index.php`, our ultra-lightweight bootstrap (`_core/bootstrap.php`) instantly wires all static helpers (`Response`, `View`, `Cache`, `Database`, `Validate`) into shared process memory via OPcache preloading (`app/preload.php`). Your physical endpoint (`app/routes/about.php` or `app/routes/api/ping.php`) executes immediately without class instantiation wrappers or middleware loops.

index.php -> app/routes/*.php
<?php
use Core\Response;
use Core\Validate;

$clean = Validate::assert($_REQUEST, ['email' => 'required|email']);
Response::json(['status' => 'success', 'data' => $clean]);

Core API Components (`_core/`)

LilaPHP provides high-speed static and singleton core utilities tailored specifically for JSON APIs, database pooling, background tasks, and anti-malware security.

`Core\Database` & `Core\Cache`

Database::getInstance() maintains an active, reusable PDO connection pool across requests. Cache delivers dual-tier speed (`Cache::api()` for local APCu RAM, and `Cache::db()` for distributed Redis).

use Core\Database;
use Core\Cache;
use Core\Response;

$items = Cache::api('active_items', function() {
    $pdo = Database::getInstance();
    $stmt = $pdo->query("SELECT * FROM items WHERE status = 'active'");
    return $stmt->fetchAll();
}, 60);

Response::json(['items' => $items]);

`Core\View`

View::render() provides native PHP template rendering with layout wrapping (app/views/layout.php), partial components, tiered multi-driver caching, SEO metadata injection, and development hot reload.

use Core\View;

View::render('about', [
    'team' => $teamMembers
], [
    'title' => 'About Us — LilaPHP',
    'cache' => 300
]);

`Core\Validate` & `Core\Response`

Validate::assert() inspects payload inputs (using $_REQUEST['lang'] for localized error messages) and halts execution instantly on invalid payloads. Response::json() outputs clean JSON with automated CORS and HTTP status headers.

use Core\Validate;
use Core\Response;

$data = Validate::assert($_REQUEST, [
    'username' => 'required|min:3',
    'age' => 'required|numeric'
]);

Response::json(['status' => 'created', 'user' => $data], 201);

`Core\Upload` & `Core\Task`

Upload::save() provides anti-malware MIME scanning and blocks embedded PHP scripts. Task::dispatch() pushes long-running jobs to background Redis queues or OS execution threads without slowing down your API endpoints.

use Core\Upload;
use Core\Task;

$savedFile = Upload::save($_FILES['document'], null, ['application/pdf' => 'pdf']);
if ($savedFile) {
    Task::dispatch('process_pdf_document', ['filename' => $savedFile]);
}