Serialize 用来将一个语言实体(对象、数组、函数等)序列化成一个字符串以便存储,Unserialize 则执行逆操作,将一个字符串恢复成原来的语言实体。

解决方案 »

  1.   

    代码里的问题
    $fd=unserialize($files);
    /*上面这行为什么必须写成$files = implode("", @file("store"));才正确?*/
      

  2.   

    $files=file("store");
    $fd=unserialize($files);如果我的store里只有一行字符,那么这样正确吗?
      

  3.   

    你写入的是序列化后的字符串,取出时也应该把全部内容都取出来,所以要用
    $files = implode("", @file("store"));
    读出文件内容,也可以用fread/fgets/file_get_contents等。记住,serialize是序列化数组的,成为一个字符串。而unserialize就是将这个字符串反序化为数组。所以unserialize的参数是一个字符串,而不是一个数组。
      

  4.   

    不管你是多少行,那样写都是错误的。unserialize的参数是一个字符串,这个字符串就是serialize一个数组的结果。我看你还是先看看手册,两个函数是干什么的吧。
      

  5.   

    $fd=unserialize($files['0']);
    我改成这样,是否就始终正确?
      

  6.   

    如果文件只有一行,且这样写
    $fd=unserialize(trim($files['0']));
    也可以。你可以尝试一下。
      

  7.   

    /*上面这行为什么必须写成$files = implode("", @file("store"));才正确?*/这是对的
    函数unserialize需要一个字符做为串参数
    而file函数返回的是一个数组