间歇性的Magento错误

时间:2014-09-11 16:56:19

标签: php magento session

我们的暂存计算机出现问题,正在运行Magento EE 1.13.1

问题在周二下午开始发生。

那时我们更新了已安装的php / mysql应用程序。

在magento主站点上,浏览器将重定向到magento安装页面。

问题仅发生在Magento应用程序中并且与会话有关 - 当错误发生时,magento会抛出类似于此的致命错误:

(我创建了一个小型测试应用程序,试图找出问题所在。)

  

致命错误:在第71行的/var/www/html/app/code/core/Mage/Customer/Model/Session.php中的非对象上调用成员函数getCode()

Call Stack: 0.0002 653728 
1. {main}() /var/www/html/t.php:0 0.3013 8153600 
2. Mage::getSingleton() /var/www/html/t.php:20 0.3013 8153912 
3. Mage::getModel() /var/www/html/app/Mage.php:477 0.3013 8153912 
4. Mage_Core_Model_Config->getModelInstance() /var/www/html/app/Mage.php:463 0.3016 8302032 
5. Mage_Customer_Model_Session->__construct() /var/www/html/app/code/core/Mage/Core/Model/Config.php:1348

问题只是间歇性地发生,我们可以通过停止和启动httpd服务来临时修复它。

我们正在运行magento ee 1.13.1,php 5.3.3和httpd 2.2.15

这是在临时机器上发生的。我们的生产机器上有相同的系统和代码,工作正常。

我们试图打开/关闭magento编译,缓存,php apc,更改php会话以使用磁盘而不是/ tmp / fs,并更改magento以使用数据库进行会话。

几分钟后网站就失败了。

系统日志中没有错误。

有人可以建议如何调试吗?

2 个答案:

答案 0 :(得分:1)

结果证明这是与libxml_disable_entity_loader()功能相关的问题。

zend框架调用此函数libxml_disable_entity_loader(true),然后使用(false)再次调用它。

我们的代码中有一条路径将此设置保留为true。

此设置的范围不仅限于当前的php脚本,还包括当前的httpd进程。即它很粘,这可以防止php simplexml_load_file函数加载外部文件。

我看到了这篇文章:

Intermittent simplexml_load_file(): I/O warning on local Joomla site

这让我发现libxml_disable_entity_loader不是线程安全的,而且确实是“粘性的”。在httpd进程中。

答案 1 :(得分:0)

禁用Magento编译:

$ php -f shell/compiler.php -- disable
Compiler include path disabled

有三种方法可以做到这一点:

  • 来自Magento admin
    导航到系统→工具→编译页面,然后单击禁用按钮。导航到系统→缓存管理屏幕并使用刷新缓存按钮。
  • 使用SFTP,通过编辑include / config.php文件
    要在Magento中禁用编译,请编辑includes / config.php。取消注释第一行并注释掉第二行:

    define('COMPILER_INCLUDE_PATH', dirname(FILE).DIRECTORY_SEPARATOR.'src');
    define('COMPILER_COLLECT_PATH', dirname(FILE).DIRECTORY_SEPARATOR.'stat');
    
  • 使用SSH shell程序:

    php -f shell/compiler.php -- disable
    
    php -f shell/compiler.php -- clear