use*_*088 9 php serialization exception simplexml
我不确定为什么会这样.我没有序列化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,
);
Run Code Online (Sandbox Code Playgroud)
然后我序列化它$some_var = serialize($game_data)并写入文本文件fputs($fh,$some_var).
但它没有那么远,它在序列化行上出错:
未被捕获的异常'异常',消息'序列化'SimpleXMLElement'不允许'
Ste*_*rig 25
您必须将XML数据转换为字符串,因为它们都是内部SimpleXMLElement的.
$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
);
Run Code Online (Sandbox Code Playgroud)
或者更优雅一点:
$game_data = array();
$properties = array('sysreqos', 'sysreqmhz', 'sysreqmem', 'sysreqdx', 'sysreqhd');
foreach ($properties as $p) {
$game_data[$p] = (string)$game->systemreq->pc->$p;
}
Run Code Online (Sandbox Code Playgroud)
在类和对象文档中,有这样的:为了能够反序列化()一个对象,需要定义该对象的类.
在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;
Run Code Online (Sandbox Code Playgroud)
作者:Ray.Paseur
我所做的就像'Stefan Gehrig'所说的那样,将XML数据转换为字符串
$_SESSION['obj'] = (string)$obj;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28094 次 |
| 最近记录: |