mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-07-06 21:04:20 +00:00
feat(admin): add transparent debug error-log mode
Add an admin-controlled debug mode that captures PHP errors of all players into var/log/debug-players.log, to hunt remaining PHP 8.3 bugs from real play sessions. Fully transparent to players: no redirect, no gameplay change, errors are never displayed. - DB: new debug_log table (one row), mirroring the maintenance pattern. - Database: getDebugMode()/setDebugMode()/setDebugSettings(), defensive when the table is absent (no blank page). - Session: register a custom error + shutdown handler when enabled; the handler runs even when php.ini error_reporting masks warnings/notices, so capture is complete without a Docker rebuild. Auto-disables after a configurable window. - DebugErrorLogger: size-capped file with a single .log.1 rotation, honours the @ operator, never throws. - Admin: new "Debug Error Log" page (levels, size cap, auto-off, on-page viewer, clear, download) + debugLog action mod. - Menu: admin-only quick on/off widget (TZ_DEBUG_ON/OFF, EN/FR/RO). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
committed by
Catalin Novgorodschi
parent
63c94fa961
commit
827354a622
@@ -129,6 +129,21 @@ function __construct() {
|
||||
}
|
||||
}
|
||||
|
||||
// === DEBUG ERROR LOG (admin-controlled, transparent to players) ===
|
||||
// When enabled from the admin panel, capture the selected PHP errors of
|
||||
// every player into var/log/debug-players.log. Auto-disables itself after
|
||||
// the configured window so a forgotten debug session cannot run forever.
|
||||
$dbg = $database->getDebugMode();
|
||||
if (!empty($dbg['active'])) {
|
||||
$autoOff = (int)($dbg['auto_off_hours'] ?? 0);
|
||||
if ($autoOff > 0 && !empty($dbg['started_at'])
|
||||
&& ($dbg['started_at'] + $autoOff * 3600) < $this->time) {
|
||||
$database->setDebugMode(0, $this->uid ?? 0);
|
||||
} else {
|
||||
\App\Utils\DebugErrorLogger::enable($dbg, $this->uid ?? 0, $this->username ?? '');
|
||||
}
|
||||
}
|
||||
|
||||
$this->referrer = $_SESSION['url'] ?? "/";
|
||||
$this->url = $_SESSION['url'] = $_SERVER['PHP_SELF'];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user