服务器配置更改后,许多后端页面中的.lib/Zend/date.php(1078)中没有日期部分



在我们客户的商店托管公司进行了一些未报告的更改后,我们在magento日期格式和许多管理屏幕中断(销售订单视图、客户、索引管理等)方面遇到了许多错误。

在报告文件夹日志中,我得到:

a:5:{i:0;s:44:"No date part in '2012-09-03 19:36:17' found.";i:1;s:6218:"#0 /public_html/sp/lib/Zend/Date.php(1078): Zend_Date->_calculate('set', '2012-09-03 19:3...', 'yyyy-MM-dd HH:m...', 'pt_BR')
#1 /public_html/sp/lib/Zend/Date.php(197): Zend_Date->set('2012-09-03 19:3...', 'yyyy-MM-dd HH:m...', 'pt_BR')
#2 /public_html/sp/app/code/core/Mage/Core/Model/Locale.php(478): Zend_Date->__construct('2012-09-03 19:3...', 'yyyy-MM-dd HH:m...', Object(Zend_Locale))
#3 /public_html/sp/app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Renderer/Datetime.php(81): Mage_Core_Model_Locale->date('2012-09-03 19:3...', 'yyyy-MM-dd HH:m...')
#4 /public_html/sp/app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column.php(128): Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Datetime->render(Object(Mage_Index_Model_Process))
#5 /public_html/sp/app/design/adminhtml/default/casadosaber/template/widget/grid.phtml(161): Mage_Adminhtml_Block_Widget_Grid_Column->getRowField(Object(Mage_Index_Model_Process))
#6 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(235): include('/public_html/s...')
#7 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(266): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#8 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(280): Mage_Core_Block_Template->renderView()
#9 /public_html/sp/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#10 /public_html/sp/app/code/core/Mage/Core/Block/Abstract.php(758): Mage_Adminhtml_Block_Template->_toHtml()
#11 /public_html/sp/app/code/core/Mage/Core/Block/Abstract.php(525): Mage_Core_Block_Abstract->toHtml()
#12 /public_html/sp/app/code/core/Mage/Core/Block/Abstract.php(476): Mage_Core_Block_Abstract->_getChildHtml('grid', true)
#13 /public_html/sp/app/code/core/Mage/Adminhtml/Block/Widget/Grid/Container.php(70): Mage_Core_Block_Abstract->getChildHtml('grid')
#14 /public_html/sp/app/design/adminhtml/default/default/template/widget/grid/container.phtml(36): Mage_Adminhtml_Block_Widget_Grid_Container->getGridHtml()
#15 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(235): include('/home/storage/5...')
#16 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(266): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#17 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(280): Mage_Core_Block_Template->renderView()
#18 /public_html/sp/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#19 /public_html/sp/app/code/core/Mage/Adminhtml/Block/Widget/Container.php(295): Mage_Adminhtml_Block_Template->_toHtml()
#20 /public_html/sp/app/code/core/Mage/Core/Block/Abstract.php(758): Mage_Adminhtml_Block_Widget_Container->_toHtml()
#21 /public_html/sp/app/code/core/Mage/Core/Block/Text/List.php(43): Mage_Core_Block_Abstract->toHtml()
#22 /public_html/sp/app/code/core/Mage/Core/Block/Abstract.php(758): Mage_Core_Block_Text_List->_toHtml()
#23 /public_html/sp/app/code/core/Mage/Core/Block/Abstract.php(525): Mage_Core_Block_Abstract->toHtml()
#24 /public_html/sp/app/code/core/Mage/Core/Block/Abstract.php(476): Mage_Core_Block_Abstract->_getChildHtml('content', true)
#25 /public_html/sp/app/design/adminhtml/default/default/template/page.phtml(74): Mage_Core_Block_Abstract->getChildHtml('content')
#26 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(235): include('/home/storage/5...')
#27 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(266): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#28 /public_html/sp/app/code/core/Mage/Core/Block/Template.php(280): Mage_Core_Block_Template->renderView()
#29 /public_html/sp/app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#30 /public_html/sp/app/code/core/Mage/Core/Block/Abstract.php(758): Mage_Adminhtml_Block_Template->_toHtml()
#31 /public_html/sp/app/code/core/Mage/Core/Model/Layout.php(529): Mage_Core_Block_Abstract->toHtml()
#32 /public_html/sp/app/code/core/Mage/Core/Controller/Varien/Action.php(391): Mage_Core_Model_Layout->getOutput()
#33 /public_html/sp/app/code/core/Mage/Index/controllers/Adminhtml/ProcessController.php(55): Mage_Core_Controller_Varien_Action->renderLayout()
#34 /public_html/sp/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Index_Adminhtml_ProcessController->listAction()
#35 /public_html/sp/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(253): Mage_Core_Controller_Varien_Action->dispatch('list')
#36 /public_html/sp/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#37 /public_html/sp/app/code/core/Mage/Core/Model/App.php(340): Mage_Core_Controller_Varien_Front->dispatch()
#38 /public_html/sp/app/Mage.php(630): Mage_Core_Model_App->run(Array)
#39 /public_html/sp/index.php(84): Mage::run('', 'store')
#40 {main}";s:3:"url";s:39:"/sp/index.php/cs_mg_admin/process/list/";s:11:"script_name";s:13:"/sp/index.php";s:4:"skin";s:5:"admin";}

在开发环境中,它工作得很好,昨天,当主机做了很多更改时,它也在那里工作。

我们使用America/Sao_Paulo作为时区,在customer_entity表中,created_at或updated_at没有NULL值的客户,sales_flat_ordersales_flat_order_grid表格中都没有。

我还尝试更新eav_attribute表中的created_at属性以及我在本主题中看到的其他内容。

有人能帮忙吗?

查看上面的转储,您的异常消息是

"No date part in"

如果你搜索Magento代码库,这个异常消息唯一显示的地方就是

#File: lib/Zend/Locale/Format.php 
$split = false;
preg_match_all('/d+/u', $number, $splitted);
if (count($splitted[0]) == 0) {
    iconv_set_encoding('internal_encoding', $oenc);
    #require_once 'Zend/Locale/Exception.php';
    throw new Zend_Locale_Exception("No date part in '$date' found.");
}

对该函数进行了一些研究,我很确定你的服务器上发生的事情是pcre_match_all函数在运行以下代码时无法找到任何匹配项(你可以通过调试来确认这一点)

preg_match_all('/d+/u', '2012-09-03 19:36:17', $splitted);

这似乎是不合逻辑的,因为其中有要拆分的数字,所以可能发生的情况是,通过PHP更改或MySQL更改,该函数接收非utf8编码的文本,而使用/u选项时,正则表达式无法正确解析字符串。

如果我正在咨询这个项目,我建议用一些调试代码来确认上面的内容(试着用纯文本运行preg_match_all函数,然后用从数据库中提取的文本)。然后我会对主机大喊大叫,告诉他们配置应用程序,这样就不会发生这种情况。然后,如果这不起作用,我将专注于如何将数据库中的所有日期文本转换为当前配置所能理解的格式。祝你好运

首先,感谢Alan Storm帮助解决了几乎真正的问题。我试图从REG EXP中删除"/u",但我意识到Magento和Zend Framework在许多地方使用带/u的正则表达式,如core/string helper和许多其他地方。

因此,我用以下代码制作了一个PHP,并尝试在这两个环境中运行它。

<?php
$number = '2012-08-23 22:15:48';
preg_match_all('/d+/u', $number, $splitted);
echo "<pre>";
var_dump($splitted);
echo "</pre>";

所以,在有问题的服务器上,我收到了警告。。。

警告:preg_match_all()[function.preg match-all]:编译失败:在中的偏移量-1处设置了未知选项位//第4行的public_html/test.php空

在网上搜索,我发现了这个(phpinfo报告了不正确的pcre版本),简而言之,它告诉我们验证pcre版本(在phpinfo()中)。

所以。。。所有这些问题都是因为PCRE lib版本。。。在我的生产环境中太老了。。。。即使用6.6 2006年2月6日,而其他人使用8.xx.

感谢它的原因,尤其是当一些主机使用suexec的安全php时,我不知道太多,但PCRE 存在一些冲突

最新更新