2010-07-19 11 views
2

我想要集成兩個PHP腳本(app1,app2),我試圖從app2中獲取app1的會話數據。刪除對象形成序列化數據

問題是,當我試圖從unserialize APP1會話數據我得到一個小錯誤噸,由於PHP是試圖找到每個對象的__wakeup()功能。

我無法使用unserialize_callback_func修復程序,因爲app2使用它,因此它已經設置並且無法更改。

我不需要對象中的任何數據,是否有某種方式我可以刪除對象,所以他們不會造成任何問題?

+1

什麼是你得到確切的錯誤? __wakeup是一個神奇的方法,只有在定義的時候纔會被調用,當沒有這種方法時引擎不應該拋出錯誤。 – 2010-07-19 08:41:46

+0

錯誤來自app2 unserialize_callback_func設置。 – Scott 2010-07-19 09:17:50

回答

2

您可以將unserialize_callback_func設置爲您自己的,然後再將其更改。

$oldCallback = ini_get("unserialize_callback_func"); 

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

ini_set("unserialize_callback_func", $oldCallback); 

此外,如果對象不存在於應用2,你也可以使用自動加載上飛(沒有任何方法)創建類,但似乎更多的hackisch

更新斯科茨評論:

這是變得非常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" 
} 
+0

對象不存在於App2中,我想知道是否可以更改unserialize_callback_func,但我無法動態創建類。 – Scott 2010-07-20 06:52:01

+0

我已經更新了我的答案,以展示一個小小的工作示例,即使如此eval()也不是很好,它是一種輕鬆創建這些類的方法。希望它適合你 – edorian 2010-07-20 08:12:24

+1

有點冒險,但它應該工作,我仍然認爲應該有一種方法來刪除它們或只是在使用反序列化時不加載它們。 – Scott 2010-07-20 09:01:32