为什么当我尝试反序列化某些结果只是空的时候呢?

时间:2013-06-09 11:03:52

标签: php serialization deserialization

例如,我有字符串

a:1:{i:0;a:3:{s:4:"name";s:56:"Song → Black Meen : “So Clean (feat. Dullaah Jin)”";s:4:"file";s:98:"http://localhost/peace.worldwide/wp-content/uploads/2013/05/03-So-Clean-feat.-Dullaah-Jin.mp3";s:9:"condition";s:3:"all";}}

我想反序列化它。

当我把它传递给unserialize()时,结果什么都没有(所以例如print_r(unserialize(/*I put the string here*/))绝对没有打印)。

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:0)

在error_reporting中打开您的通知:

PHP Notice:  unserialize(): Error at offset 204 of 229 bytes in php shell code on line 1

在这些偏移附近你有一个

s:98:"http://localhost/peace.worldwide/wp-content/uploads/2013/05/03-So-Clean-feat.-Dullaah-Jin.mp3"

表示应该有一个长度为98的字符串,但该字符串只有93个字节长。

答案 1 :(得分:0)

我发现问题导致数据库中的序列化字符串搞砸了。我已经搜索/替换了数据,将str8wayent.com替换为localhost,这显然会更改序列化值,但不会更改数据库中的长度字段。

我发现这个很好的脚本来修复sql转储文件中的序列化长度字段: github.com/Blogestudio/Fix-Serialization