Вы здесь

Drupal. Ошибка unserialize() в /includes/bootstrap.inc

tags: 

На сервере, где был установлен Drupal 6.x, в лог messages валились ошибки вида

drupal: PHP Notice: unserialize() [function.unserialize]: Error at offset 194 of 197 bytes in /home/drupal/includes/bootstrap.inc on line 555

Для исправления ошибки, вернее для анализа ее возникновения, необходимо:

  1. Активировать модуль PHP Filter, идущий в уомплекте с самим Drupal'ом
  2. Создать новый блок, выбрать тип форматирования PHP, вставить в него код
    <?php
    $serialized_false 
    serialize(FALSE);
    $result db_query('SELECT * FROM {variable}');
        while (
    $variable db_fetch_object($result)) {
          
    $variables[$variable->name] = @unserialize($variable->value);
          if (
    $variables[$variable->name] === FALSE && $variable->value !== $serialized_false) {
           print 
    "<hr/>Unserialize Error for variable:"$variable->name '='$variables[$variable->name] . "<br/>"$variable->value;
          }
        }
    ?>
  3. Установить вывод этого блока только для администраторов и выбрать регион, в котором его отображать (мне было проще его вывести в подвал).
  4. Те переменные, которые я догадался за что отвечают, настроил в админке, остальные - удалил напрямую в базе данных в таблице variable
  5. После того как в блоке перестались выводится ошибки необходимо удалить блок. Отключить модуль PHP filter.

Код подчерпнул с сайта drupal.org.