Почему я получаю уведомление после переноса сайта на новый сервер?


Я получаю эту ошибку после переноса сайта на новый сервер:

Примечание: несериализовать() [функция.несериализовать]: Ошибка при смещении 2 из 23 байт в includes/bootstrap.inc в строке 478

Я уверен, что где-то настройки были повреждены; однако сайт, похоже, работает правильно. Эта ошибка возвращается непоследовательно для анонимных пользователей, поэтому мне действительно нужно позаботиться об этом.
Ошибка не возникает на старом сервер.

У меня есть полный контроль над сервером, как новые, так и старые виртуальные машины Amazon EC2. Единственное существенное различие в инфраструктуре заключается в том, что старый сервер использовал базу данных MySQL в той же виртуальной машине, в то время как новый сервер использует сервер MySQL в RBS.

Я где-то читал, что эта проблема может быть вызвана процессом экспорта/импорта SQL и чем-то, связанным с UTF8. Я не смог собрать ничего, что я мог бы превратить в инструкции, которым нужно следовать, но у меня такое чувство, что это путь, который мне нужен взять; Я не совсем уверен, с чего начать.

Author: kiamlaluno, 2011-06-21

3 answers

Проблема может заключаться в том, что на новом сервере изменились настройки обработки ошибок. Вероятно, у вас есть поврежденная переменная в таблице переменных, которую нельзя нестерилизовать. Попробуйте использовать модуль проверки переменных .

 5
Author: Adam S, 2011-06-21 10:42:02

Это довольно сложно отладить, но вы можете отредактировать includes/bootstrap.inc, где происходит несериализация – это из функции variable_init(), где, как я предполагаю, возникает ошибка.

Исходный код выглядит следующим образом.

while ($variable = db_fetch_object($result)) {
  $variables[$variable->name] = unserialize($variable->value);
}

Попробуйте изменить его на что-то вроде этого:

while ($variable = db_fetch_object($result)) {
  $variables[$variable->name] = unserialize($variable->value);

  if (!$variables[$variable->name]) {
    drupal_set_message('Possible error while decoding ' . $variable->name);
  }
}

Здесь будут некоторые ложные срабатывания, учитывая, что некоторые значения на самом деле являются ложными или равными 0, но это должно сузить поле, помогая вам идентифицировать поврежденную переменную. Затем вы можете проверить переменные таблица в базе данных, чтобы найти и исправить это:)

 3
Author: mikl, 2011-06-21 10:39:58

У меня это случалось, когда я переносил базу данных из промежуточной в живую, и мне приходилось вручную редактировать базу данных для путей, доменного имени и т. Д.

В данном случае происходит то, что функция поиска-замены совпадает со строкой в таблице переменных и изменяет строку. Проблема в том, что длина (число после s: не изменяется, поэтому несериализовать не удается.

Если вы зайдете в редактор переменных через меню администратора, вы, скорее всего, увидите пустую запись, где есть была реальной переменной величиной. Либо обновите его здесь и сохраните, либо используйте инструмент MySQL и исправьте длину в этой строке.

 2
Author: mpdonadio, 2011-06-21 10:57:58