【问题标题】:PHP unserialize(): Error at offsetPHP反序列化():偏移量错误
【发布时间】:2011-08-03 04:28:36
【问题描述】:

我对 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);

我将不胜感激。

【问题讨论】:

  • 这是来自数据库吗?在升级过程中,序列化字符串中可能出现了一些额外的字符。正如@Udo G 所说,最好在此处发布var_dump($cache->data) 的结果。

标签: php drupal serialization drupal-6


【解决方案1】:

当您在 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';

【讨论】:

    【解决方案2】:

    听起来您的 Drupal 缓存已损坏。

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

    1. 使用管理员密码登录站点,然后从菜单中选择刷新缓存选项。这显然只有在您能够首先进入该站点时才有可能。

    2. 如果您不能这样做,您可以使用 Drush 命令行实用程序来刷新现金,而无需访问该站点。

    3. 如果您甚至无法让 Drush 工作(或者您只是不想安装它),您可以通过转到您最喜欢的 MySQL 工具中的数据库并清空所有名称以“cache_”开头的表。

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

    危险在于,即使您清除了缓存,同样的错误也可能再次发生,因此即使您确实让它再次工作,最好还是多挖掘一下,看看是否能找到找出根本原因。

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

    另外,您提到了 PHP 更新:请让我们知道您使用和使用的 PHP 版本。 PHP 5.3 中的一些 Drupal 6 模块存在已知问题,尽管核心确实支持它。请参阅http://drupal.org/requirements 了解更多信息。

    【讨论】:

    • 按照你说的做了,但是没有用。每次单击链接之前,我都必须删除缓存,但是在 optins 中,缓存被禁用。另外还有很多psql相关的错误...
    【解决方案3】:

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

    【讨论】:

    • 我得到一个随机的字母/数字序列(它是一个非常长的字符串): string(22765) "x613 并且它以: 3b7d" 结尾
    • 据我所知,任何序列化数据都以“X:n”形式开始(并以;} 结尾),其中X 是类型,n 是长度。示例a:1i:123。显然$cache->data 的值是完全错误的。您应该检查这些数据的来源。
    【解决方案4】:

    这可能是因为你的数组里面的数据不好,你可以这样修复它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2013-04-20
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      相关资源
      最近更新 更多