确定PHP脚本退出的最快方法

时间:2008-10-19 21:00:51

标签: php

假设您有一个大型PHP项目,并且突然,在尝试运行它时,您最终会得到一个空白页面。脚本终止,您希望尽可能少地找到确切的位置。

是否有工具/程序/命令/ IDE可以在PHP脚本终止时告诉您脚本退出的位置?

注意:我无法将自己的帖子标记为“已接受的答案”,因此请查看底部以查看我的解决方案。如果您想出一个更好的解决方案,我会将您的帖子标记为答案。

9 个答案:

答案 0 :(得分:9)

我使用以下代码,不需要特殊的调试环境。请注意,这可能需要很长时间;你可以设置更高的刻度数 - 这会使它更快,但模糊。

function shutdown_find_exit()
{
    var_dump($GLOBALS['dbg_stack']);
}
register_shutdown_function('shutdown_find_exit');
function write_dbg_stack()
{
    $GLOBALS['dbg_stack'] = debug_backtrace();
}
register_tick_function('write_dbg_stack');
declare(ticks=1);

答案 1 :(得分:3)

从RoBorg的非工作但仍然是正确方向的答案中获得了一些灵感,我在开始时使用了以下代码:

function shutdown() {
    global $dbg_stack_a;
    print_r($dbg_stack_a);
}
register_shutdown_function('shutdown');

然后我创建了一个全局条件断点(global =断点在每一行上进行评估),利用它可以通过eval()运行代码,具有以下“条件”:

eval('
global $dbg_stack_a, $dbg_stack_b, $dbg_stack_c;
$dbg_stack_a = $dbg_stack_b;
$dbg_stack_b = $dbg_stack_c;
$dbg_stack_c = debug_backtrace();
return false;
')

可能不快但是诀窍!使用这个我能够确定引发die()的确切文件和行位置。 (此示例适用于NuSphere。)

答案 2 :(得分:0)

grep -n die filename

答案 3 :(得分:0)

不要忘记grep“退出”。

答案 4 :(得分:0)

将其添加到文件顶部:

function shutdown()
{
    print_r(debug_backtrace());
}


register_shutdown_function('shutdown');

请参阅register_ shutdown_function()

答案 5 :(得分:0)

您可以使用交互式调试器逐步执行代码,直至到达出口点。除此之外,我认为你只需要编写exit|die的代码。

答案 6 :(得分:0)

xdebug有一个很好的跟踪功能,可以让你看到你的php应用程序执行的所有整个痕迹,它应该让你给出退出的位置的线索。

但是对于快速而肮脏的解决方案,上面提到的grep / find会正确执行。

答案 7 :(得分:0)

另请检查Apache error_log中“memory_limit”错误的error___logs。

  

内存限制> = 10M警告:(在php.ini文件中将此值设置为10M或更大)

根据我的经验,当发生这种情况时,脚本会在没有任何警告或通知的情况下突然结束。

答案 8 :(得分:0)

确保在开发环境中显示错误(而非生产)。