Я пытаюсь захватить ответ, отправленный 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()
делает что-то, что ломает это.
Любая помощь здесь будет принята с благодарностью.
Оказывается, что PHP вызывал фатальную ошибку в методе handle из-за проблемы с пространством имен запросов (не удалось найти метод процедуры).
Когда в процессе компиляции ответа SOAP происходит неустранимый ответ, он форматируется как ответ SOAP и отправляется в браузер до остановки процесса, что означает, что любой вывод выйдет из буфера.
Я надеюсь, что это поможет любому, кто столкнется с этим в будущем.
Других решений пока нет …