2011-11-10 55 views

回答

1

回顾一下调试和一些问题。

没有编程的方式来确定变量“产生”到PHP中存在的位置。

好的调试技巧是你的朋友。请检查已发布的其他答案。这里重述:

  1. debug_print_backtrace() - 让你知道包含哪些文件。
  2. 使用grep -rn 'variable_name' .从您的网站的顶级,看看它的存在。
  3. 在一堆地方添加var_dump($variable)一次可以帮助追踪变量在不同状态下的变化。

另外:
使用一个好的调试器可以帮助很多。一个广泛使用的调试器扩展是Xdebug。寻找

两个潜在的陷阱是:eval()extract()
这两种能“神奇”的原因变量的存在,这并没有之前。

当然,解决这个问题的最好方法是不要有全局变量。或者至少有尽可能少的。您可以有一个定义良好的流程到您的代码,无论是MVC或其他。然后你就会知道你的代码执行的顺序以及变量被实例化和/或传递的地方。

5

一个好的起点是debug_print_backtrace()函数。它不会跟踪变量本身已经传递的位置,但它会向您显示所有功能和包含/需要的文件的行号。

+0

是否有任何函数可以像function_name($ variable)一样用于查看变量来自哪里。我试过debug_print_backtrace(),它只是打印出哪些页面已被包含,但页面太多,我无法检查所有页面。 – user843812

2

为什么不检查正在回溯的页面中的$ _POST/$ _ GET变量。你确定你是否无法使用grep/search工具找到变量?

+0

我用grep来搜索并找到$变量的原始文件,但我不确定它是否是正确的位置。另一件事是$变量已通过几页传递,我想知道所有的页面。 – user843812

+0

您可能会添加一个打印语句以在每个页面上打印该变量的值。如果你想这样做,使用程序然后[链接] http://stackoverflow.com/questions/1538094/how-to-append-text-to-multiple-files应该帮助你。另一种方法是添加一段代码以将变量值附加到带有页面名称的文件。您可以在浏览页面后查看此文件,以查看每个页面上的变量值 – questborn

1

如果你在Linux的时候,你可以键入:

grep -rn "variable_name" . 

,查看该变量引用的文件(这些文件的行号)。

我总是喜欢测试我的假设。所以,如果您怀疑变量页面上可能被改变,你可以输入:

var_dump($variable_name); 

要看到价值。通过移动它,您可以将其置入并找到所设置变量的来源。

我希望可以帮到...

相关问题