Удаление объектов из сериализации данных - PullRequest
2 голосов
/ 19 июля 2010

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

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

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

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

1 Ответ

2 голосов
/ 19 июля 2010

Вы можете установить unserialize_callback_func на свой собственный и впоследствии изменить его.

$oldCallback = ini_get("unserialize_callback_func");

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

ini_set("unserialize_callback_func", $oldCallback);

Также, если объекты не существуют в App2, вы также можете использовать автозагрузку для создания классовна лету (без каких-либо методов), но это кажется более хакищевым

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

Это становится действительно хакишем, но это может сработать:

<?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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...