2016-04-30 5 views
0

でこんにちは私はDrupalの7を使用しています私はDrupalのお知らせ:アンシリアライズ():エラーが_menu_link_translateのオフセット104 110のバイト()(個人用サイトのライン882 に menu.incを含ん)

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

[Devel module](https://www.drupal.org/project/devel)を使用してこのエラーをデバッグしてみてください。つまり、それをインストールし、行#882の直前に 'dpm($ item);を追加します。メッセージエリアに '$ item'ダンプを表示します。少なくとも、このエラーを生成する正確なメニュー項目を理解することができます。 –

答えて

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) 

、あなたのデータベースに直接行き、手動で単語を変更した場合、「ラマ」と「属性」あなたは "s:10"を "s:5"の直前に変更していませんでしたが、受け取っているのと同じようなunserializeエラーが発生します。

この問題を解決するには、具体的に問題の原因となっているリンクを特定する必要があります。 dpm()でこれを行うことができます(上記のStanislavの記述)。また、menu_linksテーブルを直接照会して、文字列の長さと文字列の長さを表す数値の間に不一致があるリンクのoptions列を検索することもできます。また、疑わしいリンクを削除して再追加することもできます(実稼働サイトや大規模サイトでは実用的ではありません)。

悪いリンクを掘り起こすより複雑な方法がありますが、これは私の経験では最良の方法です(その順序で)。

幸運を祈る!

関連する問題