2010-02-10 42 views
1

我正在为我的webby编写一个简单的脚本,如果发生错误500,会向我发送电子邮件。我想转储所有可能的变量,会话,POST或其他任何错误发生时的情况,以便我可以尽可能精确地分析问题。如何在PHP中打印变量名称?

下面是我对现在的代码:它检查只是GLOBALS $

function variable_name(&$var) { 
    $var_name = array_search($var, $GLOBALS); 
    return "{$var_name} = \"{$var}\""; 
} 

$bar = "whatever"; 

echo variable_name($bar); // bar = "whatever" 

,但我需要的东西,将检查和打印也_POST,$ _SESSION,类字段等我GOOGLE了一下,发现了复杂的功能,看起来像是一件过于简单的任务。有没有什么简单的这个目的,或者我应该简单地为每个变量类型写一个函数?

+1

难道你不能''print_r'你想要的东西被转储到电子邮件消息体中,例如superglobals,debug_backtrace等? – Gordon 2010-02-10 12:53:15

+0

如果有多个具有相同值的变量会怎么样?或者如果变量不在全局范围内? – Gumbo 2010-02-10 12:53:22

+0

@戈登:据我所知print_r总是返回1,所以我不能。我可以使用var_dump tho。但这不是问题的关键。我只是想知道是否可以打印变量名称。对不起,如果我使用误导性的例子。 – 2010-02-10 12:55:50

回答

5

使用get_defined_vars()

该函数返回一个包含所有已定义的变量的列表多维数组,是他们的环境中,服务器或用户定义的变量,范围内的是get_defined_vars()被调用内。

这包括$GLOBALS(自PHP 5.0.0),$_POST$_SESSION

+0

正是我需要的。赞赏:) – 2010-02-10 13:03:28

1

Ondrej,尝试print_r函数。在手册中查看它,有时候会非常有用。注意它也需要一个可选的第二个参数,当你想将输出记录到文件或db而不是将其打印到屏幕上时,该参数非常有用。

+0

print_r不显示变量的实际名称。 – 2010-02-10 13:00:22

0

,但我需要的东西,会检查 和打印也_POST,$ _SESSION, 类字段等

如何:

function variable_name(&$var) { 
    $var_name = array_search($var, $_POST); // or you can put $_GET, $_SEESION,etc 
    return "{$var_name} = \"{$var}\""; 
}