2017-08-23 3 views
0

En travaillant sur un de mes PHP projet j'ai eu une fonction debug_backtrace() au début du fichier de code en tant que <?php debug_backtrace() || die ("Direct access not permitted"); ?>.Qu'est-ce que le debug_backtrace() fonctionne exactement en PHP?

Alors que bonnettes là-dessus, je suis une explication que cela fonctionne comme:

problèmes Débogueur PHP dans un site Drupal peut être quelque chose de rapide et facile à sérieusement problématique. PHP inclut une fonction de débogage appelée debug_backtrace, qui affichera la chaîne de code jusqu'à l'appel de la fonction backtrace.

Et quand je l'utilise avec var_dump()debug_backtrace() Je suis le résultat suivant:

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" 
    } 
} 

Je n'ai pas que quelle fonction debug_backtrace() fonctionne exactement.

S'il vous plaît quelqu'un d'expliquer est le bienvenu. Merci d'avance.

liens étudiés:

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

Vous voulez dire ce qu'il fait dans ce cas ou en général? Dans ce cas, si le script n'est pas appelé dans le cadre d'une application, il n'y a pas de trace de retour d'application et cela bloque donc l'exécution de ce script particulier. –

+0

Comme vous avez dit que dans ce cas, il bloquera juste l'exécution du script, cela signifie que cela fonctionne comme une session? Je suis totalement nouveau pour cette fonction: debug_backtrace(), pourriez-vous expliquer son fonctionnement général et comment cela fonctionne dans mon cas. –

Répondre

1

Donner un exemple de base ...

<?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(); 

Affichera ...

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 
       (
       ) 

     ) 

) 

J'espère que cela montre que toutes les fonctions ne debug_backtrace est de retour ce qui a été appelé à ce jour. Donc, lorsque vous appelez d'abord t1, il s'agit simplement d'une trace de pile de l'appel à t1. La même chose pour le début de t2, mais lorsque t2 appelle t1, la trace répertorie l'appel à t2 et t1.

Mais aussi comme vous pouvez le voir, que debug_backtrace de Start.. ne montre rien, car il n'y a pas de niveaux de code qui ont causé cette trace à imprimer.

Dans votre cas, il appelle debug_backtrace et utilise le or die() de dire « si rien ne debug_backtrace de retour, puis die() »