我的任务是在各种环境中建立一个网站,用于不同的评估阶段(开发/测试/升级/等).
然而,在我们的暂存环境中,似乎存在一些阻止PHP脚本完成的差异,因此页面永远不会传递到浏览器.
我想知道是否有一种方法可以输出以在切断连接时记录某种堆栈跟踪或回溯,或者是否有其他方法可以找出PHP在脚本生命周期中的任何给定点上究竟做了什么?
它是一个Drupal站点,所以它涉及很多我不熟悉的代码,可能需要几个小时才能完成.整个命令,以查看脚本加载到的位置.
我知道我应该看看环境的差异,但是所有应该都有非常相似的配置(Ubuntu 11.04),并且暂存环境似乎非常乐意为其他PHP站点服务,而这个特定的站点拒绝完成.如果此暂存站点有更多可用资源可用于其他没有问题的环境.
更新:对不起,最后发现了问题.暂存环境位于不允许通过公共IP访问自身的VLAN上,无论出于何种原因(仍然对此感到困惑),它试图将自身作为页面加载的一部分进行访问,并且永远不会完成请求.设置127.0.0.1的hosts文件条目修复了该问题.
使用像xDebug这样的工具逐步调试这样的问题是一个选项,但可能需要很长时间 – 找到断点的位置与处理放置位置的位置大致相同代码周围的陈述.调试器选项是一种更好的方法,但相比之下,当你遇到这样的问题时,你会在大量未知代码的某个地方出现一个未知的阻塞程序.
原文链接:https://www.f2er.com/php/134389.html但xDebug还有一个分析器工具,可以显示程序运行期间调用的函数,它们花了多长时间,并突出显示瓶颈的位置.这可能是一个更好的起点.只需配置xDebug以生成探查器跟踪,然后使用kCacheGrind在图形环境中查看跟踪.
如果你的程序陷入困境,或者特定的东西需要很长时间才能完成,那么这几乎可以直接找出问题;你将能够确切地看到哪个函数占用了时间,以及调用链看起来是什么样的.
很有可能,一旦你看到它,你就能通过查看相关代码找到问题.但是如果你不能,那么你可以使用xDebug的step-thru调试器来分析函数的运行情况,看看变量的设置是什么,看它为什么循环.
xDebug可以在这里找到:http://www.xdebug.org/