2010-02-10 43 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}\""; 
}