我正在浏览客户的服务器,运行疯狂的专有论坛软件 (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 函数与我需要的完全相反。
谢谢。
听起来您需要使用Xdebug来逐步完成它。最常见的 IDE 支持它,例如Netbeans和PHPStorm。
资源:
在上述两个 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)