国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

為什麼debug_backtrace()回傳為空?
P粉204136428
P粉204136428 2023-07-31 11:21:13
0
1
688
<p>我有一段PHP程式碼,運(yùn)行在PHP 7.4上。 <br /><br />其中一部分是一個(gè)頂層的PHP腳本(/home/path/a.php),它包含了一系列的try-catch區(qū)塊,並且包含了對(duì)物件和包含文件的各種調(diào)用。 <br /><br />這些try-catch區(qū)塊會(huì)在遇到客戶錯(cuò)誤和執(zhí)行時(shí)間錯(cuò)誤等情況時(shí)拋出異常。 <br /><br />在throw語句中,包含了一個(gè)錯(cuò)誤日誌,其中包含了一個(gè)debug_backtrace()列印到錯(cuò)誤日誌中。 </p><p><code></code></p> <pre class="brush:php;toolbar:false;">// some code use some/path/to/objects; $database = new Database(); include "some/file/reference.php"; try { // various things including $_SESSION data if (empty($_SESSION['b']) || empty($_POST['d'])) { if(empty($_SESSION['b'])) { error_log("session appears empty. No b"); } if(empty($_POST['d'])) { error_log("POST appears empty. No d"); } throw new RuntimeException('Incorrect validation/form details given.'); } } catch (RuntimeException | Exception $ex) { error_log("Login Page: ".$_SESSION['message']); error_log("debug: ".print_r(debug_backtrace(),true)); }</pre> <p>然而,這段程式碼運(yùn)行並正確收集了錯(cuò)誤,但錯(cuò)誤日誌只顯示了這個(gè):</p> <blockquote> <p>[31-Jul-2023 18:42:17 Europe/London] Some custom feedback message from $_SESSION['message']</p><p> [31-Jul-2023 18:42:17 Europe/London] Array</p><p> (<br /> )</p> </blockquote> <p>為什麼debug_backtrace()在這裡為空?我期望它至少能顯示頁面提供的參數(shù)和變量,或SESSION數(shù)據(jù)或環(huán)境數(shù)據(jù)。 <br /><br />我在其他地方使用過這個(gè)方法,(據(jù)我回憶)它工作得很正常。我漏掉了什麼嗎? </p><p><br /></p>
P粉204136428
P粉204136428

全部回覆(1)
P粉291886842

debug_backtrace() 提供了調(diào)用堆疊,可以追蹤你所在的位置,但你已經(jīng)處於最外層(即全域)作用域,並且沒有進(jìn)行任何調(diào)用,所以沒有調(diào)用堆疊可用。

print_r(debug_backtrace());

產(chǎn)生的結(jié)果是:

Array
(
)

如果將程式碼放在一個(gè)函數(shù)中,你將會(huì)得到一個(gè)包含一個(gè)項(xiàng)目的呼叫堆疊:

function foo()
{
    print_r(debug_backtrace());
}
foo();

產(chǎn)生的結(jié)果是:

Array
(
    [0] => Array
        (
            [file] => ...
            [line] => 6
            [function] => foo
            [args] => Array
                (
                )

        )

)

如果你想在全域作用域下獲得一些(最小的)調(diào)試信息,你可以將所有的程式碼封裝在一個(gè)閉包中,然後立即內(nèi)聯(lián)調(diào)用它:

(function() {
    // all your code here
    print_r(debug_backtrace());
})();

結(jié)果

Array
(
    [0] => Array
        (
            [file] => ...
            [line] => 5
            [function] => {closure}
            [args] => Array
                (
                )
        )
)

關(guān)於會(huì)話/環(huán)境數(shù)據(jù),只有在將它們作為參數(shù)傳遞時(shí),它們才會(huì)顯示出來:

foo($_ENV);

結(jié)果:

Array
(
    [0] => Array
        (
            [file] => ...
            [line] => 6
            [function] => foo
            [args] => Array
                (
                    [0] => Array
                        (
                            [TERM] => xterm
                            [PATH] => /usr/bin:/bin
                            [LANG] => C
                            [SHELL] => /bin/sh
                            [MAIL] => /var/mail/nobody
                            [LOGNAME] => nobody
                            [USER] => nobody
                            [HOME] => /tmp
                        )
                )
        )
)

如果你想像這樣記錄會(huì)話/環(huán)境變量,最好的方法可能是明確地將它們輸出:

error_log(print_r($_ENV, true));
error_log(print_r($_SESSION, true)); 
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板