我试图捕获PHP的SoapServer
类发送的响应,以便在实际发送到浏览器之前进行调试。
我正在使用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->_response
分配给ob_get_clean()
。虽然$soap->handle()
正在结束请求,但PHP似乎永远不会达到这一点。
如果我在缓冲区中回显一个字符串,它就不会被发送到浏览器并且被正确缓冲,这让我觉得$soap->handle()
正在做一些破坏它的事情。
非常感谢任何帮助。
答案 0 :(得分:2)
事实证明,由于请求命名空间问题(无法找到过程方法),PHP在handle方法中抛出致命错误。
当SOAP响应编译过程中发生致命事件时,它会被格式化为SOAP响应并在进程暂停之前发送到浏览器,这意味着任何输出都将转义缓冲区。
我希望这有助于将来偶然发现这一点的任何人。