问题
在做一个微信的 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));
?>
|
这个大坑耗去了快两小时!