【问题标题】:PHP unserialize errorPHP反序列化错误
【发布时间】:2011-09-02 08:01:53
【问题描述】:

我收到以下错误:-

消息:unserialize() function.unserialize:65535 字节的偏移量 65517 处出错

反序列化有最大尺寸吗?

这是我的 PHP 中有问题的行:

$array = unserialize($emails);

// this is the output of $emails (not all of it as it is huge)
string(65535) "a:12134:{i:0;s:29:"12someemail@addr.com ";i:1;s:31:"5myname@email.com "

【问题讨论】:

  • 我不这么认为。您需要提供有关数据来源的更多信息
  • 不,它没有。但是从该错误消息中猜测您的序列化字符串的来源有大小限制(TEXT 列限制为 64K)。
  • 不,他们没有(根据我[发现][1],他们可以序列化巨大的字符串)。不过,它们的内存有限,这似乎不是您的问题。您可以发布您尝试序列化/反序列化的字符串吗? [1]:php.net/manual/en/function.serialize.php#79339
  • 此数据是否来自具有 BLOB/TEXT 类型的数据库?
  • 不知道为什么有人给我否定我认为我的问题很清楚.. 哦不用担心这不是世界末日:-)

标签: php serialization syntax-error


【解决方案1】:

您将序列化数据存储到的数据库字段(可能)具有超出该字符串长度的大小限制 - 基本上,您的数据已损坏。

【讨论】:

  • 字段结构设置为“TEXT”!您是否建议我为此字段使用 BLOB?
  • 顺便说一句,除了对您的情况来说太短之外,还有另一个原因是不正确的。您可能会遇到字符编码问题 - 序列化数据应存储在二进制字段中。
  • @Gav 每个电子邮件地址应该存储在单独字段中 - 这是唯一合适的解决方案!
  • @Col 你很可能它是一个我没有构建的遗留系统,所以我只是将我对系统的更改保持在最低限度,但我可能会考虑在未来这样做谢谢:)跨度>
  • 我也有类似的问题,我发现 json_encode 的空间效率提高了大约 40%,所以这是一个更好的解决方案
【解决方案2】:

您可能将其存储在 mysql 数据库的 TEXT 字段中。如您的错误所示,它的最大大小为 65,535 字节。

您可以使用 MEDIUMTEXT,这是下一个可用的。

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多