您好我正在使用drupal 7我得到了这个奇怪的问题
Notice: unserialize(): Error at offset 104 of 110 bytes in _menu_link_translate() (line 882 of path_to_mysite\includes\menu.inc).
以下功能显示行号882
function _menu_link_translate(&$item, $translate = FALSE) {
if (!is_array($item['options'])) {
$item['options'] = unserialize($item['options']);//**this is line number 882**
}
if ($item['external']) {
$item['access'] = 1;
$map = array();
$item['href'] = $item['link_path'];
$item['title'] = $item['link_title'];
$item['localized_options'] = $item['options'];
}
我已经安装了变量检查模块,并且没有任何错误。我也尝试过以下查询,但是空的请指导我。
SELECT name, LENGTH( value ) , value
FROM variable
WHERE LENGTH( value ) = 882
答案 0 :(得分:1)
这表示相关链接已损坏。某些函数,进程或任意查询已更改数据库中的链接,因此序列化数据不是预期的长度。
序列化数据时,通常将数组或对象存储在一个字段中。这可能看起来像这样:
a:1:{s:10:"attributes";a:1:{s:5:"title";s:33:"Select and configure your themes.";}}
这意味着:
- Array with 1 element, which contains:
-- A string that is 10 characters long (attributes) (this is the element key)
-- An array with 1 element (this is the first Array's value), which contains:
--- A string that is 5 characters long (title) (this is the second Array's element key)
--- A string that is 33 characters long (Select and configure your themes.) (This is the second Array's element value)
在此示例中,如果您直接进入数据库并手动更改了单词"属性"要成为" llama",但是你决定改变" s" s" s"就在它之前:" s:5",你会得到一个类似于你收到的反序列化错误。
要解决此问题,您需要首先跟踪特定导致问题的链接。您可以使用dpm()执行此操作(正如Stanislav上面提到的那样)。您还可以直接查询menu_links表,并在options列中搜索字符串长度与描述字符串长度的数字不匹配的任何链接。您也可以开始删除可疑链接并重新添加它们(虽然这在生产或大型网站上可能不实用)。
有更复杂的方法来消除不良链接,但根据我的经验,这些是最好的方法(按此顺序)。
祝你好运!