Mini Debugging Tool in PHP

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();