Wenn man Websites mit PHP entwickelt, passiert vieles "hinter den Kulissen" auf dem Server. Variableninhalte oder Fehlermeldungen direkt auf der Website auszugeben, zerstört oft das Design oder ist für Endnutzer unschön anzusehen.
Der ConsoleLogger löst dieses Problem: Er leitet Informationen von PHP direkt in die Entwickler-Konsole deines Browsers (F12) um. So kannst du Daten prüfen, ohne dass deine Besucher davon etwas mitbekommen.
Wie funktioniert das? Normalerweise können PHP (Server) und JavaScript (Browser) nicht direkt miteinander sprechen. Der ConsoleLogger fungiert als Brücke:
- Er nimmt deine PHP-Daten (egal ob Text, Listen oder komplexe Objekte).
- Er wandelt sie in ein Format um, das JavaScript versteht (JSON).
- Er "schmuggelt" ein winziges Stück unsichtbaren JavaScript-Code in die Webseite, der die Daten sauber formatiert in der Browser-Konsole ausgibt.
Die wichtigsten Vorteile
- Saubere Optik: Dein Webdesign bleibt unberührt.
- Präzise Ortung: Der Logger verrät dir automatisch, in welcher Datei und Zeile der Befehl aufgerufen wurde.
- Performance-Check: Er misst die Zeit seit dem ersten Log, damit du langsame Prozesse aufspüren kannst.
- Sicherheit: Durch spezielle Maskierung wird verhindert, dass bösartiger Code ausgeführt wird (Schutz vor XSS).
Hier ist der Code, dieser wird in der Datei ConsoleLogger.php gespeichert.
/**
* ConsoleLogger - Ein leichtgewichtiger PHP-Debugger für die Browser-Konsole.
* * FUNKTIONSWEISE:
* Diese Klasse wandelt PHP-Variablen (Strings, Arrays, Objekte) in JSON um und
* injiziert ein kleines JavaScript-Snippet in die Seite. Dadurch erscheinen die
* Daten formatiert in den Browser-DevTools (F12).
* * FEATURES:
* - Sicherheit: Schutz vor XSS durch JSON-Hex-Maskierung.
* - Performance: Zeigt die Zeitdifferenz zum ersten Log-Aufruf an.
* - Ortung: Gibt automatisch Dateinamen und Zeilennummer an.
* - Flexibilität: Unterstützt log, warn, error, info und table.
* * ANWENDUNG:
* 1. Datei einbinden: require_once 'path/to/ConsoleLogger.php';
* 2. (Optional) Deaktivieren: ConsoleLogger::setEnabled(false);
* 3. Loggen: ConsoleLogger::log($meinArray, "Titel");
*/
class ConsoleLogger {
/** @var bool Bestimmt, ob Logs ausgegeben werden oder nicht */
private static bool $enabled = true;
/** @var float|null Speichert den Startzeitpunkt der ersten Messung */
private static ?float $startTime = null;
/**
* Schaltet den Logger ein oder aus.
* @param bool $status
*/
public static function setEnabled(bool $status): void {
self::$enabled = $status;
}
/**
* Hauptmethode zum Senden von Daten an die Konsole.
* * @param mixed $data Die Daten (beliebiger Typ), die geloggt werden sollen.
* * @param string $label Kurze Beschreibung oder Titel des Logs.
* * @param string $type JS-Konsole-Methode (log, warn, error, info, table).
*/
public static function log($data, string $label = 'PHP Debug', string $type = 'log'): void {
// Falls Logger deaktiviert, sofort abbrechen (spart Ressourcen)
if (!self::$enabled) {
return;
}
// 1. Zeitmessung berechnen
if (self::$startTime === null) {
self::$startTime = microtime(true);
$timeDiff = "0.000s";
} else {
$diff = microtime(true) - self::$startTime;
$timeDiff = "+" . number_format($diff, 3) . "s";
}
// 2. Herkunft des Aufrufs ermitteln (Datei & Zeile)
$bt = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
$file = isset($bt[0]['file']) ? basename($bt[0]['file']) : 'unknown';
$line = isset($bt[0]['line']) ? $bt[0]['line'] : '0';
// 3. Label formatieren
$fullLabel = "[$timeDiff] [$file:$line] $label";
// 4. Sicherheit & JSON-Konvertierung
// JSON_HEX_TAG etc. verhindert, dass HTML-Tags im Log das JS zerstören
$jsonData = json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_UNESCAPED_UNICODE);
$safeLabel = json_encode($fullLabel);
// 5. Validierung des Log-Typs
$allowedTypes = ['log', 'warn', 'error', 'info', 'table'];
$type = in_array($type, $allowedTypes) ? $type : 'log';
// 6. JavaScript-Ausgabe
echo "<script>console.{$type}({$safeLabel} + ':', {$jsonData});</script>\n";
}
}
Anwendungsbeispiele
Um den Logger zu nutzen, musst du lediglich die Klasse einbinden und die log-Methode aufrufen.
require_once "ConsoleLogger.php";
1. Einfaches Loggen von Variablen
Möchtest du wissen, was in einer Variable steht?
$user = "Max Mustermann";
ConsoleLogger::log($user, "Aktueller Benutzer");
In der Konsole erscheint:
[0.000s] [index.php:12] Aktueller Benutzer: "Max Mustermann"
2. Warnungen und Fehlermeldungen
Du kannst verschiedene Stufen nutzen, um wichtige Infos farblich hervorzuheben:
if ($passwort_zu_kurz) {
ConsoleLogger::log("Passwort ist zu unsicher!", "Sicherheitshinweis", "warn");
}
3. Tabellen für komplexe Daten
Arrays oder Datenbank-Ergebnisse lassen sich als übersichtliche Tabelle darstellen:
$produkte = [
['id' => 1, 'name' => 'Kaffee', 'preis' => 5.50],
['id' => 2, 'name' => 'Tee', 'preis' => 3.20]
];
ConsoleLogger::log($produkte, "Warenkorb", "table");
4. Den Logger deaktivieren
Sobald deine Website online geht ("Live-Betrieb"), möchtest du keine Interna mehr preisgeben. Du kannst alle Logs mit einer einzigen Zeile global ausschalten:
ConsoleLogger::setEnabled(false);
Zusammenfassung der Funktionen
| Typ | Beschreibung |
|---|---|
log |
Standard-Ausgabe für allgemeine Infos. |
warn |
Gelbe Markierung für Warnungen. |
error |
Rote Markierung für kritische Fehler. |
table |
Stellt Listen/Arrays in einer interaktiven Tabelle dar. |
Tipp: Drücke in deinem Browser F12 und klicke auf den Reiter „Konsole“, um die Ausgaben des ConsoleLoggers zu sehen!