Gerade bei CMS-Plugins (z. B. bei Datenstrom Yellow) lohnt sich ein kleines eigenes Debug-Tool. Damit kannst du schnell Variable prüfen, Logs schreiben und Debugging ein-/ausschalten – ohne überall var_dump() einzubauen. 🧰
Ich zeige dir ein sehr leichtes Mini-Debug-System, das du einfach in dein Plugin kopieren kannst.
Debug-Klasse erstellen
Datei debug.php erstellen mit dem Inhalt:
/**
* Debug-Hilfsklasse für die Entwicklung.
* Erlaubt das schnelle Ausgeben von Variablen, Backtraces und Logging.
*/
class Debug {
/**
* Globaler Schalter für alle Debug-Funktionen.
* Auf 'false' setzen, um alle Ausgaben in der Produktion zu unterdrücken.
* @var bool
*/
public static $enabled = true;
/**
* Formatierte Ausgabe von Daten direkt im Browser.
* * @param mixed $data Die zu untersuchenden Daten (String, Array, Objekt, etc.).
* * @param string $title Optionaler Titel für die Debug-Ausgabe.
*/
public static function dump($data, $title = "") {
if (!self::$enabled) return;
// Styling für eine dunkle, gut lesbare Konsole im Browser
echo "<pre style='background:#111; color:#0f0; padding:15px; border-radius:5px; overflow:auto; text-align:left; direction:ltr;'>";
if ($title) {
echo "<strong style='color:#fff; border-bottom:1px solid #444; display:block; padding-bottom:5px; margin-bottom:10px;'>DEBUG: " . htmlspecialchars($title) . "</strong>";
}
// Nutzt var_dump für detaillierte Typ-Informationen
var_dump($data);
echo "</pre>";
}
/**
* Schreibt Debug-Informationen mit Zeitstempel in eine Datei (debug.log).
* Nützlich für Hintergrundprozesse oder AJAX-Requests.
* * @param mixed $data Die zu loggenden Daten.
* * @param string $title Optionaler Hinweis/Titel im Log.
*/
public static function log($data, $title = "") {
if (!self::$enabled) return;
$message = "[" . date("Y-m-d H:i:s") . "] ";
if ($title) {
$message .= strtoupper($title) . ": ";
}
// print_r mit true gibt den Inhalt als String zurück statt ihn auszugeben
$message .= print_r($data, true) . "\n" . str_repeat("-", 40) . "\n";
// Schreibt in debug.log im aktuellen Verzeichnis (hängt Daten an)
file_put_contents("debug.log", $message, FILE_APPEND);
}
/**
* Zeigt die Daten an und bricht die Skriptausführung sofort ab.
* * @param mixed $data (Optional) Daten, die vor dem Abbruch gezeigt werden sollen.
*/
public static function stop($data = null) {
if (!self::$enabled) return;
self::dump($data, "STOP / HALT");
die("Programm durch Debug::stop() beendet.");
}
/**
* Gibt den Funktions-Aufrufspfad (Backtrace) aus.
* Hilft dabei zu verstehen, welcher Weg durch den Code genommen wurde.
*/
public static function trace() {
if (!self::$enabled) return;
echo "<pre style='background:#f8f8f8; color:#333; padding:10px; border:1px solid #ccc;'>";
echo "<strong>Debug Backtrace:</strong>\n";
debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
echo "</pre>";
}
}
/**
* Globaler Shortcut für Debug::dump().
* Schneller Aufruf mittels d($variable);
* * @param mixed $data
*/
function d($data) {
Debug::dump($data);
}
// --- ANWENDUNGSBEISPIELE ---
/*
$testArray = ['ID' => 123, 'Name' => 'Test-User', 'Rollen' => ['Admin', 'Editor']];
d($testArray); // Schnelle Ausgabe
Debug::log($testArray, "Login"); // In Datei speichern
Debug::trace(); // Woher kommt der Aufruf?
Debug::stop($testArray); // Hier anhalten
*/
Verwendung in der zu untersuchenden php Datei (Plugin)
Debug Tool in die zu untersuchende Datei einbinden:
require_once "debug.php";
Den Inhalt einer Variable $fileNames anzeigen
Debug::dump($fileNames, "File names");
Werte in Log Datei schreiben
Debug::log($fileNames, "Files generated");
Ergebniss der Variablen $fileNames in der Datei: debug.log
2026-03-05 Files generated Array
(
[0] style.css
[1] script.js
)
Debug Vorgang stoppen
Debug::stop($data);
Oder in der zu überwachenden Datei:
Debug::$enabled = false;
Aufruf mit Query String:
// Einbinden der Debug Datei
require_once "debug.php";
Debug::$enabled = ($_GET['debug'] ?? false);
Dann aktivierst du Debug einfach mit
http://seite.de/?debug=1
Erweiterung: Call Stack anzeigen (extrem hilfreich)
Hilft dabei zu verstehen, welcher Weg durch den Code genommen wurde.
Aufruf der Trace Funktion:
Debug::trace();