我正在尝试集成两个PHP脚本(app1,app2),我正在尝试从app2中的app1获取会话数据。
问题是当我尝试从{app 1} unserialize
会话数据时,由于PHP正在尝试为每个对象找到__wakeup()
函数,因此我收到了一小部分错误。
我无法使用unserialize_callback_func
修复,因为app2使用它已经设置好了,无法更改。
我不需要对象中的任何数据,是否有某种方法可以删除对象以免造成任何问题?
答案 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"
}