111

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

drupal開発者の場合、マルチステップの#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' => ''、'パス'=>''、)、
..。

良い:

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を使用)。

4

8 に答える 8

237

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

error_log( print_r($multidimensionalarray, TRUE) );
于 2013-09-11T12:48:29.070 に答える
23

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>タグを使用できます

于 2012-08-09T13:54:12.947 に答える
9

簡単なもの:

を使用するか、HTMLモードではなく、ビューソースモードで結果を確認する場合print_rvar_dumpまたはすべてをタグvar_exportでラップする場合は@Joel Larsonが言ったように、かなりうまくいくはずです。<pre>

print_r読みやすさには最適ですが、null/false値は出力されません。

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

var_exportと似てvar_dumpいますが、ダンプされた文字列を取得するために使用できます。

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

高度なもの:

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

于 2012-08-09T13:53:03.660 に答える
5

なぜ私が配列をデバッグするのを好む方法を誰も使用または推奨しないのか疑問に思います。

error_log(json_encode($array));

ブラウザの横でtail、サーバーがコンソールにログインします。

tail -f /var/log/apache2/error.log
于 2019-09-13T20:52:25.900 に答える
2

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

dd()

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

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

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

于 2012-08-09T13:55:45.567 に答える
1

これはあなたを助けます

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

編集

使用することecho '<pre>';は無意味var_export($var);ですが、あなたが期待していることをします。

于 2012-08-09T13:56:30.790 に答える
0

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

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

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

于 2012-08-09T13:51:47.643 に答える
0

構文

print_r(variable, return);

変数 必須。に関する情報を返す変数を指定します

オプションを返し ます。trueに設定すると、この関数は情報を返します(印刷はしません)。デフォルトはfalseです

error_log( print_r(<array Variable>, TRUE) );
于 2020-11-13T09:38:27.427 に答える