Soap问题 - SoapFault异常:[Client]看起来我们没有XML文档

时间:2013-01-14 13:51:18

标签: soap encoding php byte-order-mark

我看过类似的错误,我认为它很可能是由于BOM字符,但说实话,大多数其他编码是在不同的背景下,我只是不理解它,我不熟悉肥皂,只是使用它拉取数据然后在php中格式化。

我的代码很简单:

$activityClient = xpmClient::getModuleInstance('activity', $remoteSessionId, 'xxx.5pmweb.com');
$filter = new stdClass();
$count = 300;
$offset = 0;
$activityList = $activityClient->getList($filter, $offset, $count);

现在服务器错误显示:

> PHP Fatal error:  Uncaught SoapFault exception: [Client] looks like we got no XML document in xxx/caching.php:59\nStack trace:\n  
\#0 xxx/caching.php(59): SoapClient->__call('getList', Array)\n  
\#1 xxx/caching.php(59): xpmClient->getList(Object(stdClass), 0, '371')\n  
\#2 /xxx/reports.php(296): include('/xxx/...')\n  
\#3 {main}\n  thrown in /xxx/caching.php on line 59

report.php上的第296行是caching.php文件的包含,该文件的第59行是

$activityList = $activityClient->getList($filter, $offset, $count);

这几个月没有问题,所以我不确定今天发生了什么变化。任何想法如何剥离BOM并仍然将我的数据作为对象获取$activityList,以便我可以访问这些信息?

edit//

preg替换不起作用,我想这是因为一旦我调用$ activityList,服务器就会发出一个致命的错误并且之后没有处理任何事情,所以我试图在它破坏之后而不是之前修复它。

How would i go about doing __getLastResponse()
我已阅读手册,但不明白如何构建它,我很确定我需要尝试捕获的原因我说preg替换没有工作,但我尝试了一些变化,它没有做任何事情,我很确定结构是错误的,任何指针或想法?

2 个答案:

答案 0 :(得分:2)

我不知道为什么BOM会导致这种情况,但如果你想在这里剥离bom,你可以去

function strip_bom( $str ) {
    return preg_replace( '/^(\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\xFE\xFF|\xFF\xFE|\xEF\xBB\xBF)/', "", $str );
}

答案 1 :(得分:0)

您使用的Soap服务器已损坏。您是否手动检查过它?