跟踪代码来自何处(PHP)

时间:2011-08-28 16:25:15

标签: php trace

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

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

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

感谢。

5 个答案:

答案 0 :(得分: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();

?>

跟踪文件输出:

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]

答案 1 :(得分:2)

查看debug_backtrace功能 - 这应该始终可用,即使在生产服务器上也是如此。

答案 2 :(得分:1)

您还可以使用apd扩展程序;这将为每个请求编写一个文件,其中包含在请求期间调用PHP函数的日志。

答案 3 :(得分:1)

phptrace是一个非常简单的工具来跟踪PHP代码执行,你可以尝试一下。

答案 4 :(得分:0)

要跟踪特定功能的来源,您可以执行以下操作:

$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();

请参阅How to find out where a function is defined?

要跟踪特定类的来源,您可以执行以下操作:

$reflClass = new ReflectionClass('class_name');
print $reflClass->getFileName() . ':' . $reflClass->getStartLine();

要获取制作页面的所有包含的列表,您可以执行以下操作:

var_dump(get_included_files());

要获取页面上定义的所有函数的列表,您可以执行以下操作:

var_dump(get_defined_functions());

要获取页面上所有用户定义函数的列表,您可以执行以下操作:

$defined_functions = get_defined_functions();
var_dump($defined_functions["user"]);