我正在通过客户的服务器,运行疯狂的专有论坛 软件(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函数与我需要的完全相反。
感谢。
答案 0 :(得分:4)
听起来你需要使用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();
?>
跟踪文件输出:
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"]);