PHP unserialize (): ошибка смещения - PullRequest
3 голосов
/ 11 апреля 2011

У меня проблема с Drupal 6.20.

Возможно, после обновления PHP сайт перестал работать. Я получаю:

Notice: unserialize() [function.unserialize]: Error at offset 0 of 22765 bytes in /PATH/includes/cache.inc on line 33

Это строка:

$cache->data = unserialize($cache->data);

Буду признателен за любую помощь.

Ответы [ 4 ]

12 голосов
/ 23 ноября 2011

Эта проблема будет возникать, когда у вас Drupal 6.x работает на PostgreSQL 9.0, потому что тип байта был изменен.
Здесь есть несколько предлагаемых решений: http://postgresql.1045698.n5.nabble.com/Bytea-error-in-PostgreSQL-9-0-td3304087.html - (нравится Wayback Machine)

Запуск этого в базе данных должен исправить это:

ALTER DATABASE databasename SET bytea_output='escape';
4 голосов
/ 11 апреля 2011

Звучит так, как будто ваш кеш Drupal поврежден.

Непосредственное решение - очистить кеш.Три способа очистки кешей Drupal:

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

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

  3. Если вы даже не можете заставить работать Drush (или просто не хотите его устанавливать), вы можете сделать это вручную,переход к базе данных в вашем любимом инструменте MySQL и очистка всех таблиц, имена которых начинаются со слова «cache _».

Реальный вопрос заключается в том, почему это произошло в первомместо.К сожалению, я не могу ответить на это, без лота дополнительной информации о вашей настройке (и, вероятно, потратить некоторое время на расследование тоже).

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

Мое предположениебудет модуль румян, который получил ошибку, записал неверные данные в кэш.Возможно, вы захотите проверить сайт drupal и Google, чтобы проверить модули, которые вы используете, чтобы увидеть, есть ли какие-либо с аналогичным поведением сообщили.

Кроме того, вы упомянули обновление PHP: Пожалуйста, сообщите нам, какие версииPHP вы пошли от и до.В PHP 5.3 есть известные проблемы с некоторыми модулями Drupal 6, хотя ядро ​​его поддерживает.См. http://drupal.org/requirements для получения дополнительной информации.

0 голосов
/ 12 ноября 2013

Возможно, из-за неверных данных в вашем массиве вы можете исправить это так:

   $data= preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'",         $cache->data );
   $s_data= unserialize($data);
0 голосов
/ 11 апреля 2011

Попробуйте var_dump($cache->data). Возможно, PHP добавляет escape-последовательности и / или кавычки из-за магических кавычек или тому подобного.

...