它的功能非常强大,我担心它的稳定性和性能。
您怎么看?
更新
我正在做的是:
$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条额外的线,没什么大不了的。
答案 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__)