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

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

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

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

2

Решение

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

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

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

2

Другие решения

Других решений пока нет …