111

我在一个drupal站点上工作,在调试时,我总是不得不阅读长的嵌套数组。结果,我一生中的大部分时间都花在使用箭头键、回车键和制表键上,将 1000 多个字符串拆分为嵌套的可读格式。

对于drupal 开发人员,我不能使用devel 的dsm(),因为我正在使用多步骤#ahah/#ajax 表单,并且我只能将数组输出到错误日志,而不是屏幕。

视觉示例:

邪恶的:

数组('form_wrapper' => 数组('#tree' => true, '#type' => 'fieldset', '#prefix' => '', '#suffix' => '', '#value' = > '', 'name' => 数组 ('#type' => 'textfield', '#title' => NULL, '#size' => 60, '#maxlength' => 60, '#required' = > false, '#description' => NULL, '#attributes' => 数组 ('placeholder' => 'Email', ), '#post' => 数组 ('form_wrapper' => 数组 ('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

简单的东西:

使用print_r,var_dump或者var_export如果您在查看源代码模式而不是 HTML 模式下查看结果,或者正如@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,您可以使用 Logging Console 来监控日志文件的内容。

如果您使用的是 Linux 风格,您可以使用命令“tail -f drupal_debug.txt”来查看记录到文件中的数据。

于 2012-08-09T13:55:45.567 回答
1

这将帮助你

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

编辑

usingecho '<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 时,此函数将返回信息(不打印)。默认为假

例子

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