Drupal注意:unserialize():_menu_link_translate()中110字节的偏移104错误(mysite \ includes \ menu.inc的第882行)

时间:2016-04-30 11:38:04

标签: php drupal drupal-7

您好我正在使用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

1 个答案:

答案 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列中搜索字符串长度与描述字符串长度的数字不匹配的任何链接。您也可以开始删除可疑链接并重新添加它们(虽然这在生产或大型网站上可能不实用)。

有更复杂的方法来消除不良链接,但根据我的经验,这些是最好的方法(按此顺序)。

祝你好运!