13

我正在尝试在服务器端使用 nusoap 为动态站点开发业务逻辑(因为我需要 wsdls,而 PHP SOAP 扩展无法生成 wsdls),以及在客户端使用 PHP SOAP 扩展。

但是,我什至无法正确使用 login 和 getRole 功能。当我尝试调用客户端时,我收到以下消息

Uncaught SoapFault exception: [Client] looks like we got no XML document in [some paths]...

wsdl 确实存在于服务器端,并且客户端确实读取了它(当我为 wsdl 输入错误的 url 时,我得到一个错误)。

有人可以帮忙吗??

4

11 回答 11

23

看起来您的客户端收到了一些无效的 XML - WSDL 本身或服务器返回的响应。尝试使用设置为 TRUE 的选项调用客户端并检查通过and方法trace发送/接收的实际 XML 。__getLastRequest()__getLastResponse()

于 2010-03-30T23:13:58.493 回答
8

我只是遇到了类似的问题;原来我的服务正在echo输出一些调试数据。我删除了所有的echo行,它工作正常。

于 2010-07-19T00:54:43.727 回答
5

不要忘记使用 try/catch 块:

try {
    var_dump($client->foo());
} catch (Exception $e) {
    echo($client->__getLastResponse());
    echo PHP_EOL;
    echo($client->__getLastRequest());
}
于 2015-07-02T14:41:23.583 回答
4

我有同样的问题,我解决了这个问题:

php 中的服务器 SOAP 文件已使用 BOM 编码 utf8,导致 apache 在 xml 响应之前发回 BOM 标记(3 个字节)。

使用不带 BOM 标记的 utf8 对您的 php 文件soap 服务器进行编码。

伊格纳西奥·古铁雷斯·托雷罗

于 2011-07-28T14:32:04.497 回答
2

In my case, this error appeared when I included a script with blank lines after the "?>" label.

Delete these lines solves the problem

于 2013-07-05T03:56:30.160 回答
2

您可能在 SOAPServer 类的末尾有一些尾随空格。请查看以下博客文章以获取更多信息:http ://arnekroeger.blogspot.com/2011/02/php-soap-error-looks-like-we-got-no-xml.html

于 2011-05-04T07:57:39.240 回答
2

只需为您的 args 使用 trim()。

$objectRequette = trim($_POST['Requette']) ;
$client = new SoapClient(null, array(
    'location' => 'http://your.php',
    'uri'=>'your option',
));
$result = $client->__soapCall('Misyka', array("$objectRequettea"));
于 2012-09-26T08:45:14.847 回答
1

我有办法解决这个问题。这不是一个很好的解决方案,但它有效......

我怎么不能在我的螳螂服务器上做任何改变,我决定这样做......

首先,我必须让 SoapFault 静音:

try {
    $client = new SoapClient('http://www.mymantisaddress.com/api/soap/mantisconnect.php?wsdl', array('trace'=> 1, 'exceptions' => 0));
    $result = $client->__soapCall($function_name, $args);
} catch (SoapFault $e) {
    //$result = array(
    //    'erro' => $e->faultstring
    //);
}

其次,我注意到在我的字符串开头有这三个尾随控制字符,所以我删除了它:

$str = substr($client->__getLastResponse(), 3) . "pe>";
print $str;

第三,我必须将“pe>”放在字符串的末尾,因为它不完整。

于 2014-03-28T13:23:50.590 回答
1

有时,BOM 会生成一些额外的字符,从而产生此类问题。

要检测是否有任何 UTF BOM,请参阅此链接

于 2012-02-10T15:48:39.507 回答
1

我有同样的问题。我的问题通过设置always_populate_raw_post_data-1php.ini 解决了。

我通过在选项上添加 "trace"=>1,"exceptions"=>1 并使用try catch和获取__getLastRequest()__getLastResponse()

于 2016-10-07T12:57:29.200 回答
0

以下可能是某些用户的问题。因为我经历过。

对于最新的 nuSoap 版本,以下将解决您的问题:

在 nusoap.php 中找到以下代码

$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]"); 

在第 6132 行或此编号附近的其他内容中。

并评论它

// $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");

因为它只是为了调试目的。所以不用担心任何功能问题。

于 2016-06-17T04:53:04.187 回答