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();

从上面可以看出,$soap->handle()应该在缓冲区中捕获输出并分配给$this->_responsewith ob_get_clean()$soap->handle()尽管结束请求,PHP 似乎从来没有达到这一点。

如果我在缓冲区中回显一个字符串,它不会发送到浏览器并且被正确缓冲,这让我认为这$soap->handle()是在做一些破坏它的事情。

在这里的任何帮助将不胜感激。

4

1 回答 1

3

事实证明,由于请求命名空间问题(找不到过程方法),PHP 在句柄方法中抛出了致命错误。

当 SOAP 响应编译过程中发生致命错误时,它会被格式化为 SOAP 响应并在进程停止之前发送到浏览器,这意味着任何输出都将转义缓冲区。

我希望这对将来偶然发现此问题的任何人有所帮助。

于 2015-03-25T16:10:18.140 回答