web-dev-qa-db-ja.com

人間が読める形式でマルチレベル配列を(ログに)出力する方法は?

私はdrupalサイトで作業しており、デバッグ時には常に、入れ子になった長い配列を読む必要があります。その結果、私の人生の大部分は、矢印キー、リターンキー、タブキーを使用して、1000以上の文字列をネストされた読み取り可能な形式に分割することに費やされています。

drupal devsの場合、マルチステップの#ahah /#ajaxフォームで作業しているため、develのdsm()を使用できません。エラーログには配列のみを出力できます。スクリーン。

視覚的な例:

悪の:

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' => ''、)、

良い:

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', 
        ), 

編集:申し訳ありませんが、「画面に出力しない」とは、drupalのシステムメッセージを介して、クリック可能なネストされた形式で配列を出力できることを意味します(devel.moduleを使用)。

81
Mark Shiraldi

Apacheエラーログにエラーを記録する必要がある場合、これを試すことができます:

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

http://php.net/manual/en/function.print-r.php この関数は出力のフォーマットに使用でき、

$output = print_r($array,1);

$outputは文字列変数であり、他のすべての文字列と同様に記録できます。純粋なphpでは、trigger_errorを使用できます

trigger_error($output);

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

htmlでもフォーマットする必要がある場合は、<pre>タグを使用できます

24
Fivell

シンプルなもの:

print_rvar_dump、またはvar_exportを使用すると、HTMLモードではなくビューソースモードで結果を表示したり、@ Joel Larsonがすべてを<pre>タグ。

print_rは可読性に最適ですが、null/false値を出力しません。

var_dumpは、値のタイプと長さ、およびnull/false値のチェックに最適です。

var_exportvar_dumpと同様ですが、ダンプされた文字列を取得するために使用できます。

これらのいずれかによって返される形式は、ソースコード内で正しくインデントされ、var_exportは、ダンプされた文字列を返すために使用できるため、ログに使用できます。

高度なもの:

PHPにxdebugプラグインを使用すると、var_dumpsが生のダンプ形式ではなくHTML形式の文字列として出力され、フォーマットに使用するカスタム関数を提供することもできます。

7
Mihai Stancu

Drupalの 開発モジュール には、フォーマットされた配列やオブジェクトをログファイルに出力できる機能など、他の便利な機能があります。 http://ratatosk.net/drupal/tutorials/debugging-drupal.html のガイドを参照してください

dd()

サイトの一時ディレクトリにある「drupal_debug.txt」という名前のファイルに変数を記録します。この関数からのすべての出力はログファイルに追加されるため、コードを変更すると変数の内容がどのように変化するかを簡単に確認できます。

Mac OS Xを使用している場合、ログコンソールを使用してログファイルの内容を監視できます。

Linuxのフレーバーを使用している場合は、コマンド「tail -f drupal_debug.txt」を使用して、ファイルに記録されているデータを監視できます。

2
nmc

これはあなたを助けます

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

編集

echo '<pre>';を使用しても意味がありませんが、var_export($var);は期待どおりの動作をします。

1
code-jaff

Preタグ内でvar_dump()を使用できるはずです。それ以外の場合は、dump_r.phpのようなライブラリの使用を検討できます。 https://github.com/leeoniya/dump_r.php

私の解決策は間違っています。 OPは、ログファイルに保存するスペースでフォーマットされたソリューションを探していました。

解決策としては、出力バッファリングをvar_dumpで使用し、次にスペースを含むすべてのタブをstr_replace()して、ログファイルでフォーマットすることが考えられます。

0
Joel Larson