【问题标题】:SoapServer->handle() ignoring output bufferingSoapServer->handle() 忽略输出缓冲
【发布时间】:2015-03-25 15:04:04
【问题描述】:

我正在尝试捕获 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->_responseob_get_clean()。尽管 $soap->handle() 正在结束请求,但 PHP 似乎从未达到这一点。

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

我们将不胜感激。

【问题讨论】:

    标签: php soap buffering output-buffering soapserver


    【解决方案1】:

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

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

    我希望这对以后遇到此问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2014-02-25
      相关资源
      最近更新 更多