debug_backtrace()对于生产环境中的严重使用是否安全?

时间:2010-03-13 12:46:13

标签: php debug-backtrace

它的功能非常强大,我担心它的稳定性和性能。

您怎么看?

更新

我正在做的是:

    $old_dir = getcwd();
    chdir( dirname($included_file) );
    include ( $included_file );
    chdir( $old_dir );

基本上它只是include ( $included_file );,但在$included_file内部找不到与自身位于同一目录中的3.php,所以我手动设置了cwd和它但是如果我找到它无法找到的原因那就太好了。至于为什么需要debug_backtrace,这是因为3.php被另一个func包含,因为亲戚路径不起作用,它必须使用debug_backtrace来获取包含文件路径,最后使用如下所述的绝对路径。

重现并不容易,因为上面的代码是在方法的背景下,还有更多......如果没有其他人遇到过这种问题,我想在这里停下来无论如何,成本只是3条额外的线,没什么大不了的。

3 个答案:

答案 0 :(得分:5)

debug_backtrace在我的经验中相对昂贵,所以你应该小心它不会在循环中使用(例如,在捕获警告或通知的自定义错误处理程序中,并且每次都执行回溯)。

对于任何类型的错误记录,我认为它非常宝贵,因为它只会被调用一次,绝对不是性能问题。在错误报告中包含回溯肯定总是好的。

我不明白为什么这个函数的稳定性会有任何特定问题(即调用它导致另一次崩溃),我从来没有听说过任何问题。当使用对象作为没有定义_toString方法的函数参数时,我能看到的唯一“问题”是this note in the User Contributed Notes

当然,你永远不应该向最终用户输出回溯的结果 - 这是不言而喻的。

答案 1 :(得分:1)

嗯,考虑到它的名字,我不确定我会把它当作我应用程序的“正常”部分 - 即使我不记得读过任何说它好或坏的东西。 / p>


我真的不知道你对“严肃使用”的意思,但是:

  • 如果您需要该功能才能使您的应用程序正常工作,那么它会在您的设计中指出一些问题
  • 当您想要记录错误发生的方式/位置时,此功能在错误处理程序中非常有用:它将使日志文件更有用,当涉及到追踪来源时错误

但是,不确定“错误记录”是否与严重用法的定义相对应?

答案 2 :(得分:0)

好的,根据我的理解,问题在于

你有一个php文件,我们称之为“main.php”。在“main.php”中,您从某个目录中包含“A.php”:

# in "main.php"
include '/some/dir/A.php';
反过来,A.php包括'B.php',它与A.php在同一目录中

# in "A.php"
include 'B.php'; 

问题:因为“/ some / dir /”(其中A和B所在的位置)不是“main.php”的当前值,所以php看不到来自B.php的{​​{1}}

解决方案:在A.php中使用A.php的绝对完整路径。硬编码或通过/some/dir

动态获取
dirname(__FILE__)