wake-up-neo.com

Wie wird ein mehrstufiges Array in einem für den Menschen lesbaren Format (in einem Protokoll) ausgegeben?

Ich arbeite an einer drupal= Site und muss beim Debuggen immer lange, verschachtelte Arrays durchlesen. Infolgedessen wird ein großer Teil meines Lebens mit dem Pfeil return verbracht und Tabulatortasten, um mehr als 1000 Zeichenfolgen in ein verschachteltes, lesbares Format aufzuteilen.

Für drupal devs kann ich dsm () von devel nicht verwenden, da ich mit mehrstufigen # ahah/# ajax-Formularen arbeite und die Arrays nur in das Fehlerprotokoll ausgeben kann , nicht auf den Bildschirm.

Visuelles Beispiel:

Böse:

array ('form_wrapper' => array ('#tree' => true, '#type' => 'fieldset', '#prefix' => '', '#suffix' => '', '#value' = > '', 'name' => array ('#type' => 'textfield', '#title' => NULL, '#size' => 60, '#maxlength' => 60, '#required' = > false, '#description' => NULL, '#attributes' => array ('placeholder' => 'Email',), '#post' => array ('form_wrapper' => array ('name' => '', 'pass' => '',),

Gut:

array ( 
'form_wrapper' => array ( 
    '#tree' => true, 
    '#type' => 'fieldset', 
    '#prefix' => '<div>', 
    '#suffix' => '</div>', 
    '#value' => '', 
    'name' => array ( 
        '#type' => 'textfield', 
        '#title' => NULL, 
        '#size' => 60, 
        '#maxlength' => 60, 
        '#required' => false, 
        '#description' => NULL, 
        '#attributes' => array ( 
            'placeholder' => 'Email', 
        ), 

Bearbeiten: Entschuldigung, mit "Nicht auf dem Bildschirm ausgeben" meine ich über Drupals Systemnachrichten, bei denen es möglich ist, Arrays in einem anklickbaren, verschachtelten Format (mit devel.module) auszugeben.

81
Mark Shiraldi

Wenn Sie einen Fehler im Apache-Fehlerprotokoll protokollieren müssen, können Sie Folgendes versuchen:

error_log( print_r($multidimensionalarray, TRUE) );
174
Akhilraj N S

http://php.net/manual/en/function.print-r.php Mit dieser Funktion kann die Ausgabe formatiert werden.

$output = print_r($array,1);

$output Ist eine Stringvariable, die wie jeder andere String protokolliert werden kann. In reinem PHP können Sie trigger_error

Ex. trigger_error($output);

http://php.net/manual/en/function.trigger-error.php

wenn Sie es auch in HTML formatieren müssen, können Sie das Tag <pre> verwenden

24
Fivell

Einfaches Zeug:

Wenn Sie print_r, var_dump Oder var_export Verwenden, sollten Sie sich das Ergebnis im Ansichtsquellenmodus und nicht im HTML-Modus ansehen alles in einem <pre> - Tag.

print_r Ist für die Lesbarkeit am besten geeignet, gibt jedoch keine Null-/Falschwerte aus.

var_dump Eignet sich am besten zum Überprüfen von Wertetypen und -längen sowie Null-/Falschwerten.

var_export Ähnelt var_dump, Kann jedoch verwendet werden, um die ausgegebene Zeichenfolge abzurufen.

Das von diesen zurückgegebene Format wird im Quellcode korrekt eingerückt, und var_export Kann für die Protokollierung verwendet werden, da es zur Rückgabe der gedumpten Zeichenfolge verwendet werden kann.

Fortgeschrittene Sachen:

Verwenden Sie das xdebug-Plug-in für PHP= dies gibt var_dump Als HTML-formatierte Zeichenfolgen aus, nicht als Raw-Dump-Format. Außerdem können Sie eine benutzerdefinierte Funktion angeben, die Sie für die Formatierung verwenden möchten .

7
Mihai Stancu

Drupals Entwicklungsmodul hat andere nützliche Funktionen, einschließlich solcher, die formatierte Arrays und Objekte in Protokolldateien drucken können. Siehe Anleitung unter http://ratatosk.net/drupal/tutorials/debugging-drupal.html

dd ()

Protokolliert alle Variablen in einer Datei mit dem Namen "drupal_debug.txt" im temporären Verzeichnis der Site. Die gesamte Ausgabe dieser Funktion wird an die Protokolldatei angehängt, sodass Sie beim Ändern des Codes leicht sehen können, wie sich der Inhalt einer Variablen ändert.

Wenn Sie Mac OS X verwenden, können Sie den Inhalt der Protokolldatei mit der Protokollierungskonsole überwachen.

Wenn Sie eine Linux-Version verwenden, können Sie den Befehl "tail -f drupal_debug.txt" verwenden, um die in der Datei protokollierten Daten zu überwachen.

2
nmc

Das wird dir helfen

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

EDIT

die Verwendung von echo '<pre>'; ist nutzlos, aber var_export($var); wird das tun, was Sie erwarten.

1
code-jaff

Sie sollten in der Lage sein, einen var_dump () innerhalb eines Pre-Tags zu verwenden. Andernfalls könnten Sie eine Bibliothek wie dump_r.php verwenden: https://github.com/leeoniya/dump_r.php

Meine Lösung ist falsch. OP suchte nach einer Lösung, die mit Leerzeichen zum Speichern in einer Protokolldatei formatiert war.

Eine Lösung könnte darin bestehen, die Ausgabepufferung mit var_dump und anschließend mit str_replace () alle Registerkarten mit Leerzeichen zu verwenden, um sie in der Protokolldatei zu formatieren.

0
Joel Larson