2017-08-23 15 views
0

Während der Arbeit an einem meiner PHP Projekt bekam ich eine Funktion debug_backtrace() am Anfang der Codedatei als <?php debug_backtrace() || die ("Direct access not permitted"); ?>.Was genau funktioniert die debug_backtrace() in PHP?

Während ich eine Erklärung bekam darauf studding, dass es als Werk:

Debugging PHP Probleme in einer Drupal-Website alles von schnellen und einfach zu ernst problematisch sein können. PHP enthält eine Debugging-Funktion namens debug_backtrace, die die Code-Kette, die bis zu dem Punkt führt, wo die Backtrace-Funktion aufgerufen wird.

Und wenn ich var_dump() mit debug_backtrace() verwenden habe ich Ergebnis folgendes:

array(2) { 
    [0]=> 
    array(3) { 
    ["file"]=> 
    string(61) "C:\xampp\htdocs\folder_name\templates\default\models\home.php" 
    ["line"]=> 
    int(30) 
    ["function"]=> 
    string(7) "include" 
    } 
    [1]=> 
    array(4) { 
    ["file"]=> 
    string(37) "C:\xampp\htdocs\folder_name\index.php" 
    ["line"]=> 
    int(146) 
    ["args"]=> 
    array(1) { 
     [0]=> 
     string(61) "C:\xampp\htdocs\folder_name\templates\default\models\home.php" 
    } 
    ["function"]=> 
    string(7) "include" 
    } 
} 

ich nicht bekommen, was debug_backtrace() Funktion genau arbeiten.

Bitte jemand erklären ist willkommen. Danke im Voraus.

Studierte Links:

debug_backtrace() from registered shutdown function in PHP

Debugging PHP Code with debug_backtrace

Assign debug_backtrace() To a variable in PHP

Print PHP Call Stack

How can I save a PHP backtrace to the error log?

+0

Sie meinen, was es in diesem Fall oder im Allgemeinen tut? In diesem Fall, wenn das Skript nicht als Teil einer Anwendung aufgerufen wird, gibt es keine Anwendungsrückverfolgung und blockiert daher nur das Ausführen dieses bestimmten Skripts. –

+0

Wie Sie gesagt haben, dass es in diesem Fall blockiert nur das Ausführen des Skripts, das heißt, es funktioniert als Sitzung? Ich bin völlig neu für diese Funktion: debug_backtrace(), erklären Sie bitte die allgemeine Funktionsweise und wie es in meinem Fall funktioniert. –

Antwort

1

ein einfaches Beispiel geben ...

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

echo "Start..."; 
print_r(debug_backtrace()); 

function t1() { 
    echo "Start t1..."; 
    print_r(debug_backtrace()); 

} 

function t2() { 
    echo "Start t2..."; 
    print_r(debug_backtrace()); 
    t1(); 
} 

echo "before calls..."; 
print_r(debug_backtrace()); 
t1(); 
t2(); 

Will Ausgang ...

Start...Array 
(
) 
before calls...Array 
(
) 
Start t1...Array 
(
    [0] => Array 
     (
      [file] => /home/nigel/workspace/PHPTest/TestSource/part3.php 
      [line] => 22 
      [function] => t1 
      [args] => Array 
       (
       ) 

     ) 

) 
Start t2...Array 
(
    [0] => Array 
     (
      [file] => /home/nigel/workspace/PHPTest/TestSource/part3.php 
      [line] => 23 
      [function] => t2 
      [args] => Array 
       (
       ) 

     ) 

) 
Start t1...Array 
(
    [0] => Array 
     (
      [file] => /home/nigel/workspace/PHPTest/TestSource/part3.php 
      [line] => 17 
      [function] => t1 
      [args] => Array 
       (
       ) 

     ) 

    [1] => Array 
     (
      [file] => /home/nigel/workspace/PHPTest/TestSource/part3.php 
      [line] => 23 
      [function] => t2 
      [args] => Array 
       (
       ) 

     ) 

) 

Ich hoffe, das zeigt, dass die alle debug_backtrace Funktion tut, ist zurückzugeben, was bisher genannt wurde. Wenn Sie also zum ersten Mal t1 aufrufen, handelt es sich einfach um eine Stack-Trace des Aufrufs an t1. Das gleiche für den Start von t2, aber wenn t2 Anrufe t1, führt die Ablaufverfolgung den Anruf zu t2 und t1.

Aber auch, wie Sie sehen können, zeigt debug_backtrace von Start.. nichts, da es keine Ebenen von Code gibt, die diese Spur verursacht haben, gedruckt zu werden.

In Ihrem Fall nennt es debug_backtrace und verwendet die or die() ‚wenn debug_backtrace kehrt nichts, dann die()‘ zu sagen