PHP отправляет ответ SOAP раньше?

Ну, это старая проблема, с которой я столкнулся, и до сих пор нет решения, поэтому пытаюсь применить новый подход.

Как я могу отправить ответ SOAP раньше (до завершения выполнения скрипта)?

Эти проблемы возникают, когда ACK-файл не отправляется до 30 секунд, так как процесс занимает больше времени, чем завершено.

flush () не работает, получите эту ошибку:

org.xml.sax.SAXParseException: структуры XML-документов должны начинаться и заканчиваться внутри одного и того же объекта.

без флеша () Я получаю это

org.xml.sax.SAXParseException: преждевременный конец файла.

Процесс скрипта может занять 180 секунд, и сервер, ожидающий ответа, будет ждать только около 30 секунд до истечения времени ожидания (которые вызывают указанную выше ошибку).

любые мысли о том, как я могу это исправить?

Вот некоторые из кода: Вот как я принимаю и отправляю ACK-файл для входящего запроса SOAP

$data = 'php://input'; $content = file_get_contents($data); if($content) { respond('true'); } else { respond('false'); } 

Функция ответа

 function respond($tf) { $ACK = <<<ACK <?xml version = "1.0" encoding = "utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <notifications xmlns="http://soap.sforce.com/2005/09/outbound"> <Ack>$tf</Ack> </notifications> </soapenv:Body> </soapenv:Envelope> ACK; print trim($ACK); } 

PHP использует один подход к обработке потоков и не отправляет обратно файл ACK до тех пор, пока поток не завершит его обработку. Есть ли способ закрыть сокет после подачи ACK и продолжить обработку, чтобы я не получил эти проблемы с таймаутом на отправляющем сервере?