【问题标题】:Session saving problem, getting PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0会话保存问题,出现 PHP 致命错误:在第 0 行的 Unknown 中抛出没有堆栈帧的异常
【发布时间】:2011-07-23 09:01:12
【问题描述】:

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

PHP 致命错误:在第 0 行的 Unknown 中抛出没有堆栈帧的异常

我尝试注释掉代码片段,看看我可以将其缩小到哪里,但运气不佳。我在 Magento 观察者中启动代码,该观察者调用我创建的模型,该模型也在会话中设置一些变量。我有很多调用其他类的方法,例如我的观察者调用我的订单模型,它也调用我的客户模型,并且它们都在它们的类中调用了一些不同的方法。通过记录和注释行来在服务器上调试它有点困难,我没有取得好的进展。

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

我只是想弄清楚调试它的最佳方法是什么。我不明白为什么在将它放在那里时它会起作用,以及在析构函数中可能会死什么,显然我没有在析构函数中抛出异常,但我正在做的事情是。但在我将代码放在暂存服务器上之前,它一直运行良好。顺便说一句,它也在使用 nginx 而不是 apache。

【问题讨论】:

  • 为什么不使用 Zend_Session ?既然你是在 zend 框架中做的,为什么不全力以赴:)
  • 我正在使用 Magento 的会话模型。

标签: php zend-framework session magento


【解决方案1】:

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

在另一个项目中,我遇到了这个问题并且得到了和你一样的错误信息。

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

我不确定,但如果您创建自定义 serialize() 函数,您可能会发现问题。

【讨论】:

  • 我想现在,要做的事情可能是通过并一一注释掉我试图保存到会话中的每一件事,看看可能会发生什么。我只是不明白为什么它只在一台服务器上不起作用。
  • 5.2 和 5.3 之间的巨大差异。当生产/登台是 5.3 时,您在 5.2 上开发有什么特别的原因吗?
  • hmm 我想我找到了,我正在尝试将地址对象保存到会话中,我认为这样做。无论如何要确保在会话中正确设置对象?我正在使用 5.2,因为我们通常总是在 5.2 上使用 Magento,但最近有一个新主机将我们切换到 5.3,我意识到现在我需要改变。我在 Mac 上,有 10.5 leopard 并使用了 entropy.php。
  • 我仍然不知道该怎么做,我发现问题在于我认为我正在保存到会话的地址对象,但我不知道它为什么会死或该怎么做解决这个问题。
  • 为了解决这个问题,我只是存储了addresses数据数组而不是整个对象,仍然不确定能够存储整个对象的原因。
猜你喜欢
  • 2013-01-16
  • 2011-01-21
  • 1970-01-01
  • 2011-06-05
  • 2012-05-16
  • 2011-04-09
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
相关资源
最近更新 更多