在我的PHP
项目之一工作时,我在代码文件的开头有一个函数debug_backtrace()
<?php debug_backtrace() || die ("Direct access not permitted"); ?>
。
在研究它时,我得到了一些解释,它的作用如下:
在Drupal网站上调试PHP问题可以快速进行 并且容易出现严重问题。 PHP包含一个调试功能 调用debug_backtrace,它将打印出代码链 导致回溯函数被调用的点。
当我将var_dump()
与debug_backtrace()
一起使用时,我得到了以下结果:
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"
}
}
我没有得到debug_backtrace()
功能正常工作的内容。
欢迎任何人解释。提前谢谢。
研究过的链接:
debug_backtrace() from registered shutdown function in PHP
Debugging PHP Code with debug_backtrace
答案 0 :(得分:2)
给出一个基本的例子......
<?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();
将输出......
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
(
)
)
)
我希望这表明所有debug_backtrace
函数都返回到目前为止所调用的内容。因此,当您第一次调用t1
时,它只是对t1
的调用的堆栈跟踪。 t2
的开头也是如此,但当t2
调用t1
时,跟踪会列出对t2
和t1
的调用。
但正如您所看到的那样,来自debug_backtrace
的{{1}}没有显示任何内容,因为没有任何级别的代码导致打印此跟踪。
在您的情况下,它会调用Start..
并使用debug_backtrace
说“如果or die()
没有返回任何内容,那么debug_backtrace
&#39;
答案 1 :(得分:0)
我认为 debug_backtrace() 最有用的方法是跟踪哪个文件是 init 启动核心,例如
a.php
include 'b.php';
b.php
function test(){
echo('whatever');
}
print_r(debug_backtrace())
php a.php
whateverArray
(
[0] => Array
(
[file] => /opt/php/b.php
[line] => 7
[function] => test
[args] => Array
(
)
)
[1] => Array
(
[file] => /opt/php/a.php
[line] => 3
[args] => Array
(
[0] => /opt/php/b.php
)
[function] => include
)
)
所以,你可以从
$backtrace = debug_backtrace()
echo $backtrace[count($backtrace) - 1]['file'];
获取开始调用的文件