会话保存问题,获取PHP致命错误:在第0行的Unknown中没有堆栈帧时抛出异常

时间:2011-03-26 06:06:38

标签: php zend-framework session magento

好的,我已经在Magento电子商务平台内部编写了一个集成到第三方订单管理解决方案,该平台构建于Zend Framework之上。一切都在我的本地机器和我的本地开发服务器上运行良好。两个服务器都使用PHP 5.2.x.部署到使用PHP 5.3.3的Staging服务器时,我现在在代码的一部分中收到此错误

PHP致命错误:在第0行的“未知”中没有堆栈帧的情况下抛出异常

我已经尝试过评论一些代码,看看我可以将它缩小到哪些但是没有那么好运。我在Magento观察器中启动代码,该观察器调用我创建的模型,该模型也在Session中设置一些变量。我有很多方法调用其他类,比如我的观察者调用我的订单模型,它也调用我的客户模型,并且所有这些方法都在其类中调用了一些不同的方法。通过记录和注释掉行,很难在服务器上调试它,我没有取得很好的进展。

从我所做的研究来看,在我看来,更像是我试图设置到会话的东西在析构函数中死亡。我尝试在它返回之前在我的观察者方法的末尾使用session_write_close(),这样它可能会在早些时候向我显示错误,但它实际上使我的程序没有死,它就像它假设的那样工作。我不确定我是否愿意将其留在那里,因为我确信它可能会使剩余的流程变得混乱,但我对此并不了解。

我只想弄清楚调试它的最佳方法是什么。当我把它放在那里并且在析构函数中可能会死的时候,我不明白为什么它有效,显然我不是在析构函数中抛出异常,但我正在做的事情是。但它已经工作正常,直到我把代码放在Staging服务器上。顺便说一下,也使用nginx而不是apache。

2 个答案:

答案 0 :(得分:2)

首先,这些东西很难调试。我认为问题在于序列化。在对象存储在会话中之前,它将被序列化以便存储。

在另一个项目中,我遇到了这个问题并得到了与你相同的错误消息。

Magento有几个无法序列化的类。其中一个类是Mage_Core_Config_Element。也许你利用那个班级?

我不确定,但是如果你创建一个自定义的serialize()函数,你可以找到问题。

答案 1 :(得分:0)

我遇到了这个问题,因为我的数据库表中的主要ID设置为INT(11)(IDIOT!)

Duplicate DB sessions created upon Zend_Auth login

应该设置为CHAR(32)!