跟踪代码来自何处 (PHP)

dot*_*hen 5 php trace

我正在浏览客户的服务器,运行疯狂的专有论坛软件 (vBulletin) 甚至更糟的 SEO mods (vbseo)。我无法弄清楚页面的 php 代码来自哪里!如何将此 URL 追溯到 PHP 页面: http://www.example.com/forum/members/connie.html 我刚刚加入了一个项目,该项目的代码基于带有 VBSEO 插件的经过大量修改的 vBullitin 安装。这个特殊的插件是可怕的意大利面条式代码,包含数十个 include()、.htaccess 重定向和可能的 .httpd.conf 更改。然后它从数据库中提取字符串,所以我什至无法使用 grep 来查找代码文件!

有什么方法可以堆栈跟踪 PHP 来记录运行以生成页面的所有代码?我有 root 访问权限,但我不应该停止或重新启动服务器。用于生成页面的文件的 include() 层次结构的简单列表就足够了。

请注意,我不能使用 debug_backtrace,因为我不知道我要查找的代码在哪里!debug_backtrace 函数与我需要的完全相反。

谢谢。

Ali*_*guy 4

听起来您需要使用Xdebug来逐步完成它。最常见的 IDE 支持它,例如NetbeansPHPStorm

资源:

在上述两个 IDE 中,您可以按住 CTRL 键并单击函数/方法,它会将您带到文件中定义该函数/方法的行。您还可以跟踪函数和变量的使用情况。

跟踪代码内置于 xdebug 中。这是 Zend 的一个示例:

<?php

  xdebug_start_trace('c:/data/fac.xt');

  print fac(7);

  function fac($x)
  {
    if (0 == $x) return 1;
    return $x * fac($x - 1);
  }

  xdebug_stop_trace();

?>
Run Code Online (Sandbox Code Playgroud)

跟踪文件输出:

TRACE START [2007-10-26 12:18:48]
    0.0068      53384     -> fac() C:\www\fac.php:5
    0.0069      53584       -> fac() C:\www\fac.php:10
    0.0069      53840         -> fac() C:\www\fac.php:10
    0.0070      54096           -> fac() C:\www\fac.php:10
    0.0070      54376             -> fac() C:\www\fac.php:10
    0.0071      54656               -> fac() C:\www\fac.php:10
    0.0072      54936                 -> fac() C:\www\fac.php:10
    0.0072      55216                   -> fac() C:\www\fac.php:10
    0.0073      55392     -> xdebug_stop_trace() C:\www\fac.php:13
    0.0237      55392
TRACE END   [2007-10-26 12:18:48]
Run Code Online (Sandbox Code Playgroud)

  • 在实时服务器上安装调试扩展是一个非常糟糕的主意。 (3认同)