问题
在做一个微信的 PHP
后台时需要读微信服务器 POST
过来的 XML
,然后保存到 Memcache
中。
index.php
1
2
3
4
5
6
7
8
9
| <?php
public index() {
$postData = $GLOBALS["HTTP_RAW_POST_DATA"];
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$this->cache->memcached->save("openid_".$something, $postObj->FromUserName);
...
}
?>
|
怎么也出不来结果,然后发现运行到 save
时有异常,是 Memcache
抛出的,说无法串行化。通过 var_dump
后发现 $postObj->FromUserName
是个 SimepleXMLElement
类型,而用 var_dump
$postObj
时发现是 string
!!
解决方法
解决方法有多种:
- 强制转换为
string
1
2
3
| <?php
$this->cache->memcached->save("openid_".$something, (string)$postObj->FromUserName);
?>
|
- 强制转换为
array
1
2
3
4
5
| <?php
$postData = $GLOBALS["HTTP_RAW_POST_DATA"];;
$postObj = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$this->cache->memcached->save("openid_".$something, $postObj["FromUserName"]);
?>
|
- 转为
stdClass
1
2
3
4
| <?php
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$postObj = json_decode(json_encode($postObj));
?>
|
这个大坑耗去了快两小时!