删除对象形成序列化数据

时间:2010-07-19 08:35:39

标签: php object serialization

我正在尝试集成两个PHP脚本(app1,app2),我正在尝试从app2中的app1获取会话数据。

问题是当我尝试从{app 1} unserialize会话数据时,由于PHP正在尝试为每个对象找到__wakeup()函数,因此我收到了一小部分错误。

我无法使用unserialize_callback_func修复,因为app2使用它已经设置好了,无法更改。

我不需要对象中的任何数据,是否有某种方法可以删除对象以免造成任何问题?

1 个答案:

答案 0 :(得分:2)

您可以将unserialize_callback_func设置为您自己的,然后再将其更改。

$oldCallback = ini_get("unserialize_callback_func");

ini_set("unserialize_callback_func", "myNewCallback");
yourUnserialize();

ini_set("unserialize_callback_func", $oldCallback);

此外,如果App2中不存在对象,您也可以使用自动加载来动态创建类(没有任何方法),但这似乎更hackisch

Scotts评论更新:

这真的是hackisch但它可能会起作用:

<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';

ini_set('unserialize_callback_func', 'mycallback');
function mycallback($classname)
{
    eval("class $classname {}");
}

var_dump(unserialize($serialized_object));
?>
// Prints:
object(a)#1 (1) {
  ["value"]=>
  string(3) "100"
}