PHP unserialize():偏移时出错

时间:2011-04-11 15:38:48

标签: php drupal serialization drupal-6

我对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 个答案:

答案 0 :(得分:12)

当您在PostgreSQL 9.0上运行Drupal 6.x时会发生此问题,因为bytea类型已被修改。
这里有一些建议的解决方案:http://postgresql.1045698.n5.nabble.com/Bytea-error-in-PostgreSQL-9-0-td3304087.html - (喜欢Wayback Machine)

在数据库上运行它应修复它:

ALTER DATABASE databasename SET bytea_output='escape';

答案 1 :(得分:4)

听起来你的Drupal缓存已经损坏了。

立即解决方案是清除缓存。清除Drupal缓存的三种方法:

  1. 使用管理员密码登录该站点,然后从菜单中选择flush caches选项。如果您可以首先进入该网站,这显然是可能的。

  2. 如果你不能这样做,你可以使用Drush命令行工具来冲洗现金,而不必去网站。

  3. 如果你甚至不能让Drush工作(或者你只是不想安装它),你可以通过你最喜欢的MySQL工具中的数据库手动完成,并清空所有名称以“cache _”开头的表。

  4. 真正的问题是为什么会发生这种情况。可悲的是,如果没有很多关于你的设置的更多信息(并且可能花一些时间进行调查),我无法回答这个问题。

    危险在于,即使您清除了缓存,也会再次发生同样的错误,所以即使您再次使用它,最好还是稍微挖一下,看看能不能找到找出根本原因。

    我的猜测是一个胭脂模块,它有一个错误已经将错误的数据写入缓存。您可能需要检查drupal站点和Google以检查您正在使用的模块,以查看是否有任何报告过相似行为的模块。

    另外,您提到了PHP更新:请告诉我们您来自哪个版本的PHP。 PHP 5.3中的一些Drupal 6模块存在已知问题,尽管核心确实支持它。有关详细信息,请参阅http://drupal.org/requirements

答案 2 :(得分:0)

尝试var_dump($cache->data)。可能是由于魔术引号或类似原因,PHP正在添加转义序列和/或引号。

答案 3 :(得分:0)

可能是因为数组中的数据不好,你可以像这样解决它:

   $data= preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'",         $cache->data );
   $s_data= unserialize($data);