【发布时间】:2015-10-28 16:14:42
【问题描述】:
我们正在使用由 ZendFramework 生成的 SocialEngine。这不是直接关于 SocialEngine 的问题,尽管它是相关的。这也不是关于 ZendFramework 的具体问题。我想这里的教训广泛适用于大多数 PhP MVC 框架。
我们有一个问题,显然在高负载条件下,网站的某些部分停止显示。例如,整个小部件的内容将无法加载而没有任何明显的错误。缺乏诊断问题的错误让我抓狂。
这根本不是关于负载或优化的问题。
我可以通过从 ZendFramework 视图、模型或控制器调用不存在的类属性来重现类似的问题,例如:
<?php echo $this->article->fubar; ?>
此时,它所属的小部件将无法显示而没有任何明显的错误。当小部件本身是页面的主要显示部分时,这是有问题的。
我怀疑这些问题最终是由尚未初始化的类变量引起的,但代码库太大而无法识别没有更好的错误报告的位置。它也可能是链接对象失败的结果,例如类似:
<?php $this->article->getCategory()->getTitle(); ?>
...如果 getCategory() 方法返回 null,理论上可能会导致此行为。
此外,我相信 ZendFramework 的数据模型中的“神奇”属性导致错误报告的缺乏,它允许动态类属性,如果数据模型有一些字段“blablabla”,$this->article ->blablabla 填充了该字段的内容。但是,如果要访问的属性不是数据库字段,那么这种神奇的行为就没有多大帮助,尤其是在它禁用正常的错误报告的情况下。这也解释了为什么 $this->article->fubar();导致小部件无法以相同的方式加载。
面对这种行为时,如何从 ZendFramework 中获取准确的错误?
【问题讨论】:
-
当您说没有错误时,您的意思是页面上没有出现,或者错误日志中也没有出现?你能在开发中重复这个问题,还是只在你的生产服务器上重复这个问题?
-
我在错误日志或屏幕中都找不到。我的猜测是有将它们重定向到错误日志的功能,然后出于……原因……实际上没有出现。该问题同时出现在生产服务器和开发服务器上,然后在两者上都消失了,这就是为什么我认为它最终与负载有关,并且可能与外部服务的速率限制有关。无论如何:没有错误,就无法确认。
标签: php zend-framework properties error-handling socialengine