Teil von SELFHTML aktuell Teil von Artikel Teil von PHP

PHP:
Variablenkontrolle im Browser

nach unten Stefan Eickhoff
nach unten Hinweise zum Thema
nach unten Beispiel mit Erläuterungen
nach unten Weiterführende Links

Stefan Eickhoff

E-Mail: E-Mail stefan.eickhoff@gmx.de

Bei Fragen zu diesem Beitrag bitte den Autor des Beitrags kontaktieren!

nach obennach unten

Hinweise zum Thema

Beim Entwickeln und Testen von PHP-Skripten für den Einsatz im Web ist es sehr hilfreich, wenn nicht unerlässlich, sich die Werte von bestimmten Variablen zur Kontrolle im Browser anzeigen zu lassen.
Dies gilt besonders für GET- und POST-Parameter, Cookies sowie Sessiondaten, also alles Werte die in Arrays gespeichert sind.
Zur komfortablen Ausgabe von Array-Strukturen stehen in PHP die Funktionen var_dump() und print_r() zur Verfügung.
Um eine richtige Darstellung der Zeilenumbrüche im Browser zu erreichen muss die Ausgabe dieser Funktionen zusätzlich in <pre> HTML-Tags eingeschlossen werden. Da dies auf Dauer etwas umständlich ist, liegt es nahe sich eine eigene Funktion für diese Aufgabe zu schreiben.

Die Funktion print_r() liefert zwar eine besser lesbare Ausgabe als var_dump(), es werden aber keinerlei Informationen zum Typ
der Variablen – und boolsche oder NULL-Werte sogar überhaupt nicht – angezeigt.
Damit ist sie für unsere Zwecke wenig geeignet.

Die Funktion var_dump() liefert all diese Informationen, allerdings lässt die Formatierung der Ausgabe stark zu wünschen übrig.
Mit einigen wenigen Veränderungen lässt sich aber eine deutlich aufgeräumtere Darstellung erreichen.

Und genau das ist es, was die Funktion im folgenden Beispiel tut.

nach obennach unten

Beispiel mit Erläuterungen

Beispiel

<?php
/**
* my_var_dump.php
*
* Funktion zur Anzeige der Werte von Variablen im Browser
*
*/


function my_var_dump($v)
{
        // Ausgabe von var_dump über Output-Buffer in Variable einlesen

	ob_start ();
        var_dump ($v);
	$content = ob_get_contents ();
	ob_end_clean ();


        // maximale Einrückung ermitteln

        $m = 0;
#1	
        preg_match_all ('#^(.*)=>#mU', $content, $stack);
        $lines = $stack[1];
        $indents = array_map ('strlen', $lines);
	if ($indents) {
	        $m = max ($indents) + 1;
	}
#2
        // Ausgabe von var_dump() an maximaler Einrückung ausrichten

	$content = preg_replace (
			'#^(.*)=>\\n\s+(\S)#eUm',
			'"\\1" .str_repeat(" ", $m - strlen("\\1")>1 ? $m - strlen("\\1") : 1). "\\2"',
			$content);


        // bei Array-Strukturen öffnende Klammer { in neue Zeile

	$content = preg_replace (
			'#^((\s*).*){$#m',
			"\\1\n\\2{",
			$content);
	
	echo '<pre>'. htmlentities($content). '</pre>';

}

?>

Erläuterung:

Zunächst wird die Ausgabe von var_dump() mit Hilfe der PHP-Funktionen zur Ausgabe-Pufferung in eine Variable eingelesen.
Dann wird die erforderliche Einrücktiefe ermittelt um alle Werte vertikal untereinander ausrichten zu können.
Dann werden entsprechend Leerzeichen ergänzt, und die zweizeilige Ausgabe der Key-Value Paare von var_dump() zu jeweils einer Zeile zusammengefasst.
Das Ergebnis wird mit Hilfe von <pre> HTML-Tags und htmlentities() zur Anzeige im Browser aufbereitet und ausgegeben.

Beachten Sie:

Wenn die Bezeichner für die Arraykeys sehr lang sind, oder tief gestaffelte Arraystrukturen ausgegeben werden, kann es zu unübersichtlich langen Zeilen kommen.
Falls Sie keine vertikale Ausrichtung der Werte wünschen, brauchen Sie im Beispiel nur den Bereich von #1 bis #2 auszukommentieren.
Eine weitere Idee wäre es, den maximalen Wert für die Einrückung $m nach oben zu begrenzen.

Wenn Sie sich die unterschiedlichen Resultate der genannten Funktionen einmal im Vergleich anschauen möchten, können Sie dazu folgendes kleine Skript benutzen.

Beispiel

<?php
/**
* example.php
*
* Vergleich der Ausgabe von print_r(), var_dump() und my_var_dump();
*
*/

include ('./my_var_dump.php');		# Hier das obige Beispiel einfügen 

function h1_headline($v)
{
 		if (!empty($v)) {
  		printf('<h1>%s</h1>',$v);
  	}
}

function show_var_dump($v)
{
		ob_start();
		var_dump($v);
		$content = ob_get_contents();
		ob_end_clean();
		echo '<pre>'.$content.'</pre>';
}

function show_print_r($v)
{
		ob_start();
		print_r($v);
		$content = ob_get_contents();
		ob_end_clean();
		echo '<pre>'.$content.'</pre>';
}

$example = array(
 'Hallo Welt',
 5,
 -12,
 3.14,
 7E-10,
 array(
  1,
  2,
  3,
  4,
  array(
   'kalt' => 'Alaska',
   'sehr warm' =>'Brasilien',
   'überschwemmt' => 'China',
  ),
 ),
 true,
 false,
 NULL,
 '',
 '<strong>fett</strong>',
);

h1_headline ('var_dump();');
show_var_dump ($example);

h1_headline ('print_r();');
show_print_r ($example);

h1_headline ('my_var_dump();');
my_var_dump ($example);

?>

nach obennach unten

Weiterführende Links

Die folgenden Stellen werden empfohlen, um das obige Beispiel besser zu verstehen, oder um weitere Möglichkeiten und Details zu erfahren.

deutschsprachige Seite PHP.NET: var_dump()
deutschsprachige Seite PHP.NET: print_r()
deutschsprachige Seite PHP.NET: Funktionen zur Ausgabesteuerung
englischsprachige Seite PHP.NET: Regular Expression Functions

Teil von SELFHTML aktuell Teil von Artikel Teil von PHP

© 2007 bereichsübergreifende Seite Impressum