2

SoapServer実際にブラウザーに送信される前に、デバッグのためにPHP のクラスから送信された応答を取得しようとしています。

出力バッファリングを使用してZend_Soap_Server出力をキャプチャできるようになっているものを利用しています。SoapServer->handle()ただし、handle メソッドはバッファを完全に無視しているようで、ブラウザに直接送信してリクエストを強制終了しています。

これはZend_Soap_Server->handle()メソッドから直接抽出したものです。

ob_start();
if ($setRequestException instanceof Exception) {
    // Create SOAP fault message if we've caught a request exception
    $fault = $this->fault($setRequestException->getMessage(), 'Sender');
} else {
    try {
        $soap->handle($this->_request);
    } catch (Exception $e) {
        $fault = $this->fault($e);
    }
}
$this->_response = ob_get_clean();

上記からわかるように、 からの出力はバッファにキャプチャされ、 with$soap->handle()に割り当てられる必要があります。リクエストを終了しているように、PHPはこの時点に到達していないようです。$this->_responseob_get_clean()$soap->handle()

バッファ内の文字列をエコーすると、ブラウザに送信されず、正しくバッファリングされるため、$soap->handle()何かを壊していると思われます。

ここで何か助けていただければ幸いです。

4

1 に答える 1

3

リクエストの名前空間の問題により、PHP がハンドル メソッド内で致命的なエラーをスローしていたことが判明しました (プロシージャ メソッドが見つかりませんでした)。

SOAP 応答のコンパイル プロセス内で致命的な問題が発生すると、SOAP 応答としてフォーマットされ、プロセスが停止する前にブラウザに送信されます。つまり、出力はすべてバッファをエスケープします。

これが、将来これに出くわした人に役立つことを願っています。

于 2015-03-25T16:10:18.140 に答える