SoapServer-›handle() игнорирует буферизацию вывода

Я пытаюсь захватить ответ, отправленный классом PHP SoapServer для отладки, прежде чем он будет фактически отправлен в браузер.

Я использую Zend_Soap_Server, который должен позволять захватывать вывод из SoapServer->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(). PHP, кажется, никогда не доходит до этого момента, поскольку $soap->handle() завершает запрос.

Если я повторяю строку в буфере, она не отправляется в браузер и буферизуется правильно, что заставляет меня думать, что $soap->handle() делает что-то, что ее ломает.

Любая помощь здесь будет принята с благодарностью.


person Dan Greaves    schedule 25.03.2015    source источник


Ответы (1)


Оказывается, PHP вызывал фатальную ошибку в методе дескриптора из-за проблемы с пространством имен запроса (не удалось найти метод процедуры).

Когда в процессе компиляции ответа SOAP возникает фатальная ошибка, он форматируется как ответ SOAP и отправляется в браузер до того, как процесс будет остановлен, что означает, что любые выходные данные не попадут в буфер.

Я надеюсь, что это поможет любому, кто наткнется на это в будущем.

person Dan Greaves    schedule 25.03.2015