13

サーバー側でnusoapを使用して(wsdlsが必要であり、PHP SOAP拡張機能がwsdlsを生成できないため)、クライアント側でPHP SOAP拡張機能を使用して、動的サイトのビジネスロジックを開発しようとしています。

しかし、ログインや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ファイルはutf8をBOMでエンコードしているため、apacheはxml応答の前にBOMマーク(3バイト)を送り返します。

PHPファイルのsoapサーバーをutf8WITHOUTBOMマークでエンコードします。

イグナシオ・グティエレス・トレロ

于 2011-07-28T14:32:04.497 に答える
2

引数に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 に答える
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

私の場合、「?>」ラベルの後に空白行のあるスクリプトを含めると、このエラーが発生しました。

これらの行を削除すると問題が解決します

于 2013-07-05T03:56:30.160 に答える
1

BOMは、このタイプの問題を引き起こす余分な文字を生成する場合があります。

UTF BOMがあるかどうかを検出するには、このリンクを参照してください。

于 2012-02-10T15:48:39.507 に答える
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
    //);
}

次に、文字列の先頭にこの3つの末尾の制御文字があることに気付いたので、それを削除しました。

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

第三に、文字列の最後に「pe>」を付ける必要があります。これは、文字列が不完全だったためです。

于 2014-03-28T13:23:50.590 に答える
1

私は同じ問題を抱えています。私の問題はphp.iniに設定always_populate_raw_post_dataすることで解決しました。-1

オプションに"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 に答える