Исключить исключение «Исключение» с сообщением «Сериализация« SimpleXMLElement »не допускается»

Я не знаю, почему это происходит. Я не сериализую XML, но мой массив, который я создал из RSS-канала (обратите внимание, что это всего лишь фрагмент):

$game_data = array ( 'sysreqos' => $game->systemreq->pc->sysreqos, 'sysreqmhz' => $game->systemreq->pc->sysreqmhz, 'sysreqmem' => $game->systemreq->pc->sysreqmem, 'sysreqdx' => $game->systemreq->pc->sysreqdx, 'sysreqhd' => $game->systemreq->pc->sysreqhd, ); 

Затем я сериализую его $some_var = serialize($game_data) и записываю в текстовый файл fputs($fh,$some_var) .

Но это далеко не так, это ошибка в строке сериализации:

Исключить исключение «Исключение» с сообщением «Сериализация« SimpleXMLElement »не допускается»

Solutions Collecting From Web of "Исключить исключение «Исключение» с сообщением «Сериализация« SimpleXMLElement »не допускается»"

Вы должны SimpleXMLElement данные XML в строку, потому что внутри они все являются SimpleXMLElement s.

 $game_data = array ( 'sysreqos' => (string)$game->systemreq->pc->sysreqos, 'sysreqmhz' => (string)$game->systemreq->pc->sysreqmhz, 'sysreqmem' => (string)$game->systemreq->pc->sysreqmem, 'sysreqdx' => (string)$game->systemreq->pc->sysreqdx, 'sysreqhd' => (string)$game->systemreq->pc->sysreqhd ); 

Или, может быть, немного более элегантно:

 $game_data = array(); $properties = array('sysreqos', 'sysreqmhz', 'sysreqmem', 'sysreqdx', 'sysreqhd'); foreach ($properties as $p) { $game_data[$p] = (string)$game->systemreq->pc->$p; } 

В документах классов и объектов есть следующее: Чтобы иметь возможность unserialize () объекта, должен быть определен класс этого объекта.

До PHP 5.3 это не было проблемой. Но после PHP 5.3 объект, созданный SimpleXML_Load_String (), не может быть сериализован. Попытка сделать это приведет к сбою во время выполнения, вызывая исключение. Если вы храните такой объект в $ _SESSION, вы получите сообщение об ошибке после выполнения:

Неустранимая ошибка: исключение исключение «Исключение» с сообщением «Сериализация« SimpleXMLElement »не разрешено» в [нет активного файла]: 0 Трассировка стека: # 0 {main} выбрано [нет активного файла] в строке 0

Все содержимое сеанса будет потеряно. Надеюсь, это поможет кому-то!

 <?php // RAY_temp_ser.php error_reporting(E_ALL); session_start(); var_dump($_SESSION); $_SESSION['hello'] = 'World'; var_dump($_SESSION); // AN XML STRING FOR TEST DATA $xml = '<?xml version="1.0"?> <families> <parent> <child index="1" value="Category 1">Child One</child> </parent> </families>'; // MAKE AN OBJECT (GIVES SimpleXMLElement) $obj = SimpleXML_Load_String($xml); // STORE THE OBJECT IN THE SESSION $_SESSION['obj'] = $obj; 

Автор: Ray.Paseur

Ссылка: http://php.net/manual/en/function.unserialize.php

что я делаю, так как «Стефан Гериг» сказал, передал данные XML в строку

 $_SESSION['obj'] = (string)$obj;