jspit.de
Impressum


Debug - Simple PHP Debug Class

Software: Debug - Simple PHP Debug Class
Datei: class.debug.php Download
Version: 1.95

Ziel

Die Debug-Class liefert bei Ausführung des Nutzerscriptes eine Reihe nützlicher Informationen zu Variablen, Arrays und Objekten durch einen einfachen Methodenaufruf. Nutzbar nicht nur für PHP Beginner, sondern für alle die sich etwas mehr an Informationen wünschen als z.B. ein var_dump liefert und professionelle Debug-Tools nicht installieren wollen oder können. Das bietet die Debug-Class :
  1. Variableninfos für eine beliebige Anzahl von Parametern
  2. Backtraceinfos
  3. Millisekunden Zeitstempel
  4. Memory usage
  5. Ausgabe wahlweise sofort auf dem Display, verzögert oder in eine Logdatei
  6. Decoding ermitteln für Strings

Konzept und Funktion

Die Class beschränkt sich auf eine kleine Anzahl einfacher Methoden. Variablen, Arrays und Objekte sollen soweit möglich so ausgegeben werden, daß sie per Copy und Paste in andere Codesnippets übernommen werden können und dort per Zuweisung reproduziert werden können. Die Output-Control-Funktionen werden in der Class nicht benutzt. Durch den Zeitstempel und Infos zur Speichenutzung erhält der Nutzer einen groben Überblick zum Laufzeitverhalten seiner Applikation. Die Ausgabe erfolgt in der Form einer übersichtliche Tabelle.

Benutzung

Die Class muß immer vor der Benutzung per include oder require eingebunden werden. Mit der write-Methode werden die gewünschten Informationen sofort auf dem Display ausgegeben.
Beispiel:
require 'class.debug.php'; //Class einbinden
debug::log(true); //Displayausgabe erlauben (optional)
// :
debug::write('$_GET,$fileContent,$counter',$_GET,$fileContent,$counter);

Ausgabe:
[27.03.2012 08:40:26,750][+26 μs](408k/416k) Debug::write "test1debug.php" Line 20
0 string(27) "$_GET,$fileContent,$counter"
1 array(1)
array (
  'bild' => "img.jpg",
)
2 string(8) "123843\x0d\x0a"
3 integer 16 [00000010h]
Die differentielle Zeitangabe nach den absoluten Zeitstempel bezieht sich auf das vorhergehende Debug::write oder Debug::save bzw. das erste Debug::log(true). Es folgt der aktuelle Speicherbedarf des Scriptes und das Maximum in runden Klammern. Bei der Arbeit mit der Debug-Class hat es sich als zweckmäßig erwiesen, als ersten Parameter ein string mit den Namen der folgenden Parameter in single Quotes mitzugeben. Als 2.Parameter wird im Beispiel das $_GET-Array übergeben. Der Inhalt des Arrays kann übernommen werden indem es 1:1 kopiert und einer Variablen zugewiesen wird. Das gilt auch für Strings. Dort werden einige Steuerzeichen wie z.B. "\r\n" in ihrer hexadezimalen Schreibweise angezeigt, die sonst nicht sichtbar sind. Variablen vom Typ integer werden zusätzlich noch hexadezimal angezeigt.

Eine sofortige Ausgabe von Debuginformationen auf dem Display ist mitunter unerwünscht, insbesondere wenn zu dem Zeitpunkt eigene Scriptausgaben vorgenommen werden. Hier bietet sich die save-Mehode an, um die Informationen einzusammeln und zu einem späteren Zeitpunkt mit der write Methode auszugeben.
Ist eine Ausgabe grundsätzlich unerwünscht (z.B. bei der Erzeugung von Grafiken) oder nicht möglich, dann kann durch Angabe eines Filenamens auch in eine Datei geloggt werden.
require 'class.debug.php';
debug::log();
$xmlString = '<bb>
<rr opt="2" at="att2">Test Debug-Class</rr>
<rr2 opt="6">Inhalt</rr2>
</bb>';
$xml = simplexml_load_string($xmlString);
debug::save('$xml,(string)$xml->rr',$xml,(string)$xml->rr);
echo '<h3>'.(string)$xml->rr.'</h3>';
debug::save('(string)$xml->rr2',(string)$xml->rr2);
echo '<br>Eine zeile mit '.(string)$xml->rr2.'<br>';
debug::write();

Ausgabe:

Test Debug-Class


Eine zeile mit Inhalt
[27.03.2012 09:30:54,312][+81 μs](400k/409k) Debug::save "test_debug_save.php" Line 12
0 string(21) "$xml,(string)$xml->rr"
1 object(SimpleXMLElement)(2)
<?xml version="1.0"?>

<bb>
  <rr opt="2" at="att2">Test Debug-Class</rr>
  <rr2 opt="6">Inhalt</rr2>

</bb>
2 string(16) "Test Debug-Class"
[27.03.2012 09:30:54,312][+221 μs](402k/409k) Debug::save "test_debug_save.php" Line 14
0 string(17) "(string)$xml->rr2"
1 string(6) "Inhalt"
[27.03.2012 09:30:54,312][+77 μs](402k/410k) Debug::write "test_debug_save.php" Line 16

Methoden (Basic)

AufrufBedeutung
debug::log($par,$errLog) Mit einen Aufruf der log-Methode kann die Ausgabe modifiziert werden, ohne daß eine Ausgabe getätigt wird. debug::log(true); erlaubt die Ausgabe auf dem Display. Ab den Aufruf debug::log(false) ist die Class deaktiviert, es erfolgen keine Ausgaben und mit save wird auch nichts gespeichert. Wird log ein string übergeben, z.B. debug::log('log_testscript.html'), dann wird der Inhalt als Filename interpretiert und alle Ausgaben erfolgen in diese Datei. Optional kann beim Log in eine Datei ein 2.Parameter $errLog übergeben werden. Ist $errLog == true, dann werden Systemfehlermeldungen mit in die selbe Datei geloggt. Eine vorhandene Logdatei wird überschrieben, mit einem vorangestellten + im string angehängt, z.B. debug::log('+log_testscript.html'). Ein debug::log('') stoppt die Ausgabe in die Datei und schaltet auf Displayausgabe um. Bei einem Aufruf von log wird immer ein erster Zeitstempel gesetzt, sofern dies nicht schon durch write oder save erfolgt ist.
debug::write($var1,$var2,..) Sofortige Ausgabe von Debuginformationen zu allen übergebenden Parametern. Zuvor werden alle mit der save-Methode gespeicherten Informationen ausgegeben, sofern vorhanden.
debug::save($var1,$var2,..) Speichert die Debuginformationen zu allen übergebenden Parametern in einen internen Buffer. Die Ausgabe der gepeicherten Informationen erfolgt mit der write-Methode.
debug::wrc($var1,$var2,..) Sofortige Ausgabe von Debuginformationen wie bei der Methode write(), jedoch mit rotem Hintergrund in der Titelzeile.
debug::setTitleColor($color) Setzt die Hintergrundfarbe der Titelzeile für zukünftige Ausgaben von write(). $color ist ein string mit der für CSS typischen Farbnotation wie z.B. #030. Helle Farben sind zu vermeiden, da die Schriftfarbe weiss unverändert bleibt.
debug::stop($condition,$var1,$var2,..) Wird als condition eine Zahl vom Typ int übergeben, so wird diese als Counter gespeichert und bei jeden Aufruf decrementiert. Bei Erreichen der 0 liefert die Methode wie write die gewünschten Informationen und nach der Ausgabe wird das script mit exit() beendet. Damit können wirksam Endlosschleifen überwacht werden. Condition kann auch eine boolsche Variable oder Bedingung sein, welche bei true dann zum Stop führt. Ein exit kann für die Stop-Methode unterdrückt werden, s.a. Attribut $exitOnStop.
debug::clear() Löscht den internen Buffer mit allen dort per save gespeicherten Informationen.
debug::resetStopCounter() Setzt den internen StopCounter für die stop-Methode zurück, so das beim nächsten Aufruf von stop der interne Counter mit dem im Parameter $condition angegebene Wert neu initialisiert wird.
debug::getClean($var1,$var2,..) Liefert ein HTML-String mit Debuginformationen wie bei write().

Methoden (Helper)

AufrufBedeutung
debug::strhex($string) Liefert für $string die hexadezimale Schreibweise.
Beispiel : echo debug::strhex("A\r\n");
Ausgabe : \x41\x0d\x0a
debug::detect_encoding($string) Versucht die Kodierung des strings zu ermitteln. Mögliche Rückgabewerte sind 'UTF-8', 'ISO-8859-1', 'ASCII' und false.
debug::TypeInfo($obj) Liefert eine Information zum Typ (integer,array..) von $obj ähnlich wie bei var_dump. Bei strings wird zusätzlich versucht die Kodierung zu ermitteln.
debug::systeminfo() Liefert eine Information zum Betriebssystem, der PHP Version und Integer-Bitbreite. Beispiel: Linux PHP 5.4.11 (64Bit)
debug::crc($var) Liefert die 32Bit CRC Prüfsumme vom Argument als Hex-String mit der Länge 8. Das Argument $var kann jeder Datentyp (string, array, Objekt) außer Resource sein. Nützlich um eine markante Kennzahl(Hash) für große Objekte, Arrays oder Strings zu erhalten.

Attribute

NameDefaultwertBedeutung
debug::$real_time_output false Bei aktivierter Ausgabepufferung kann die Displayausgabe der Debuginformationen zeitlich verzögert zur Scriptbearbeitung erfolgen. Wird eine zeitnahe Beobachtung der Debugausgaben gewünscht, kann dieses Attribut auf true gesetzt werden.
debug::$exitOnStop true Wird $exitOnStop auf false gesetzt, wird bei der Stop-Methode kein exit ausgeführt, sondern als Returnwert true geliefert. Damit können bei Eintreten der Bedingung eigene Aktionen unternommen werden. Beispiel:
debug::$exitOnStop = false;
// :
if (debug::stop($i>500,$i)) break;