【问题标题】:PHP - Getting bool(false) when using unserializePHP - 使用反序列化时获取 bool(false)
【发布时间】:2014-05-29 15:47:52
【问题描述】:

我从服务器得到的 $response 如下所示:-

a:2:{s:3:"Car";s:0:"";s:9:"JbMessage";s:0:"";s:10:"PreBooking";s:0:"";s:6:"pickup";s:36:"TOWNEND CENTRE; WORKSOP ROAD S26 4WB";s:4:"Zone";s:8:"OOA_EAST";s:7:"dropoff";s:41:"PRINCE WILLIAM ROAD; LOUGHBOROUGH LE115GU";s:8:"PassName";s:0:"";s:8:"Customer";s:0:"";s:9:"AccountNo";s:0:"";s:8:"DocketNo";s:0:"";s:3:"Tel";s:0:"";s:7:"CarType";s:3:"Car";s:8:"Comments";s:0:"";s:9:"Comments1";s:0:"";s:9:"OrderedBy";s:0:"";s:12:"Autorization";s:0:"";s:8:"BookedBy";s:0:"";s:15:"BookingDateTime";s:19:"11042014 09:31:49";s:10:"Dispatched";s:10:"01011900";s:5:"Miles";s:5:"43.21";s:6:"Driver";s:0:"";s:7:"Payment";s:4:"Cash";s:8:"Priority";s:1:"1";s:4:"Done";s:1:"C";s:11:"JourneyType";s:0:"";s:12:"NoPassengers";s:1:"1";s:5:"Drops";s:0:"";s:2:"TM";s:0:"";s:14:"BookingMethode";s:5:"Phone";s:7:"Editted";s:0:"";s:9:"EdittedOn";s:10:"01011900";s:9:"FromHouse";s:0:"";s:6:"FromNo";s:0:"";s:10:"FromStreet";s:28:"TOWNEND CENTRE; WORKSOP ROAD";s:10:"FromZoneNo";s:2:"73";s:12:"FromPostCode";s:7:"S26 4WB";s:10:"FromEWGrid";s:0:"";s:12:"emailAddress";s:0:"";s:9:"FromNotes";s:0:"";s:11:"AutorizedBy";s:0:"";s:7:"ToHouse";s:0:"";s:4:"ToNo";s:0:"";s:8:"ToStreet";s:33:"PRINCE WILLIAM ROAD; LOUGHBOROUGH";s:8:"ToZoneNo";s:2:"73";s:10:"ToPostCode";s:7:"LE115GU";s:6:"Mobile";s:0:"";s:7:"ToNotes";s:0:"";s:8:"ToEWGrid";s:0:"";s:11:"BookingDate";s:19:"11042014 09:31:00";s:10:"DriverFare";s:4:"71.5";s:12:"CustomerFare";s:4:"71.5";s:12:"DriverExtras";s:1:"0";s:14:"CustomerExtras";s:1:"0";s:11:"WaitingTime";s:0:"";s:

我正在做以下事情:-

$response = strip_tags($response);
$deserializedAddressArray = stripslashes($response);
$deserializedAddressArray = unserialize($response);

var_dump($deserializedAddressArray);

但是,我不明白为什么 $deserializedAddressArray 会以 bool(false) 的形式返回,有什么想法吗?

【问题讨论】:

  • 我运行了你的代码,我得到了Notice: unserialize(): Error at offset 46 of 1495 bytes。你确定你的序列化字符串有效吗?
  • 该响应看起来被截断,以;s:结尾
  • 是的,字符串说,“我有两个长度元素”a:2,但序列化字符串中甚至没有元素。字符串被截断
  • 那么这就是答案。 php.net/manual/en/function.unserialize.php,根据返回值,如果字符串无效则为false,并抛出NOTICE。显然你已经注意到错误关闭了,否则你会发现的。

标签: php serialization


【解决方案1】:

您的序列化数据无效。请确保您提供正确的字符串。其中没有结束括号,例如有效的序列化字符串

 a:1:{s:4:"name";s:6:"testing";}

这是带有结束括号的有效序列化字符串

【讨论】:

    【解决方案2】:

    所以我们知道该字符串是无效的,但作为在黑暗中的刺,这可能有以下原因之一:

    • 如果字符串是针对表存储的,那么列类型应为long text,以确保存储高度可变的字符串长度。

    • 如果任何被序列化的数据包含非编码字符或多字节字符,则字符串可能以其中一个字符结尾。 PHP unserialize fails with non-encoded characters?

    【讨论】:

      【解决方案3】:

      得到这个工作,问题是在开始a:2: - 一旦我将其更改为a:77:,它就开始工作了。

      这是因为响应中有 77 个值。

      【讨论】:

        【解决方案4】:

        您必须增加数据库中表的大小。 示例:varchar 255 到 varchar 510 或将类型更改为 TEXT。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多