使用Docker按照官方流程安装,最后打开首页,发现没有显示banner,查看源码发现在fecshop\services\cms\staticblock\StaticBlockMysqldb 类的getByIdentify方法解序列失败,原因大概是解码与编码不一致,导致特殊符号长度不一。
public function getByIdentify($identify)
{
$one = $this->_staticBlockModel->find()->asArray()->where([
'identify' => $identify,
])->one();
foreach ($this->_lang_attr as $attrName) {
if (isset($one[$attrName])) {
$one[$attrName] = unserialize($one[$attrName]);
}
}
return $one;
}
在网上找到解决方法:
public function getByIdentify($identify)
{
$one = $this->_staticBlockModel->find()->asArray()->where([
'identify' => $identify,
])->one();
foreach ($this->_lang_attr as $attrName) {
if (isset($one[$attrName])) {
// $one[$attrName] = unserialize($one[$attrName]);
$one[$attrName] = $this->mb_unserialize($one[$attrName]);
}
}
return $one;
}
protected function mb_unserialize($serial_str)
{
$serial_str = preg_replace_callback('/s:(\d+):"([\s\S]*?)";/', function($matches) {
return 's:'.strlen($matches[2]).':"'.$matches[2].'";';
}, $serial_str);
return unserialize($serial_str);
}
@Fecmall [#1楼](#comment1) 按照docker安装示例装的,除了没显示banner,其它正常。具体数据在static_block表id=5。还有就是docker安装时,docker-compose配置切换aliyun,docker-compose.yml.aliyun文件mysql缺少example_db_2.x,不然在导入数据环节会找不到sql文件