2010-07-19 3 views
2

Я пытаюсь интегрировать два PHP-скрипта (app1, app2), и я пытаюсь получить данные сеанса из app1 в app2.Удаление объектов из данных сериализации

Проблема заключается в том, что я пытаюсь выполнить unserialize данные сеанса из app1. Я получаю небольшую тонну ошибок, потому что PHP пытается найти функцию __wakeup() для каждого из объектов.

Я не могу использовать исправление unserialize_callback_func, потому что приложение 2 использует его так, что оно уже установлено и не может быть изменено.

Мне не нужны какие-либо данные в объектах, есть ли способ, которым я могу просто удалить объекты, чтобы они не вызывали никаких проблем?

+1

Каковы точные ошибки вы получаете? __wakeup - волшебный метод, который вызывается только в том случае, если он определен, двигатель не должен бросать ошибки, когда такого метода нет. –

+0

Исправлены ошибки при установке app2 unserialize_callback_func. – Scott

ответ

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

Обновление для Скоттс комментарий:

Это становится действительно 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

+0

Я обновил свой ответ, чтобы показать небольшой рабочий пример, даже если eval() не очень приятный, это простой способ создать эти классы «на лету». Надеюсь, это сработает для вас. – edorian

+1

Немного рискованно, но он должен работать, я все же думаю, что должен быть способ удалить их или просто не загружать их при использовании unserialize. – Scott

Смежные вопросы