4

在我们客户的商店托管公司进行了一些未报告的更改之后,我们在 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 属性以及我在本主题中看到的其他内容。

有人能帮忙吗?

4

3 回答 3

7

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

"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使用纯文本运行该函数,然后使用从数据库中提取的文本)。然后我会对主机大喊大叫,告诉他们配置他们的应用程序,这样就不会发生这种情况。然后,如果这不起作用,我将专注于如何将数据库中的所有日期文本转换为当前配置可以理解的格式。祝你好运!

于 2012-09-03T21:08:10.313 回答
2

首先,感谢 Alan Storm 帮助找出了它几乎真正的问题。我试图从该 REG EXP 中删除“/u”,但我意识到 Magento 和 Zend 框架在许多地方使用带有 /u 的正则表达式,例如核心/字符串助手和许多其他地方。

因此,我使用以下代码制作了一个 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]:编译失败:在第 4 行的 /.../public_html/test.php 中的偏移量 -1 处设置了未知选项位 NULL

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

所以......所有这些问题都是因为PCRE lib 版本......在我的生产环境中太旧了......使用 6.6 06-Feb-2006而其他人使用8.xx

于 2012-09-05T20:08:48.953 回答
0

感谢它,因为它主要是当某些主机使用带有 suexec 的安全 php 时,我不太了解,但 PCRE 存在一些冲突

于 2013-11-29T21:25:34.300 回答