php unserialize 在线,PHP: unserialize - Manual

阳宗清
2023-12-01

When you serialize an object of a class from a particular namespace, the namespace is recorded as part of the serialization. If you decide to change this namespace's name, it can be hard to read in old serialized objects. I.e., suppose you had serialized an object of type foo\A, you change the namespace of your project to goo but otherwise leave the class definition of A unchanged. You would like to be able to unserialize the object as goo\A, instead unserialization will only create a partial object. To fix this in the case where you don't have nested objects in your class definition, you can use the following simple rename function:

/**

* Used to change the namespace of a serialized php object (assumes doesn't

* have nested subobjects)

*

* @param string $class_name new fully qualified name with namespace

* @param string $object_string serialized object

*

* @return string serialized object with new name

*/

function renameSerializedObject($class_name, $object_string)

{

/*  number of digits in the length of name of the object needs to be

less than 12 digits (probably more like 4) for this to work.

*/

$name_length = intval(substr($object_string, 2, 14));

$name_space_info_length = strlen("O:".$name_length.":") +

$name_length + 2; // 2 for quotes;

$object_string = 'O:' .

strlen($class_name) . ':"'. $class_name.'"' .

substr($object_string, $name_space_info_length);

return $object_string;

}

 类似资料: