글쎄,이 문제는 내가 다루었 던 아직 해결되지 않은 낡은 문제이기 때문에 새로운 접근 방식을 시도하고있다.PHP가 SOAP 응답을 일찍 보내겠습니까?
SOAP 응답을 일찍 보내는 방법 (스크립트 실행이 끝나기 전에)?
이러한 문제는 할당 된 시간을 완료하는 데 프로세스가 더 오래 걸리므로 30 초 전에 ACK 파일을 보내지 않으면 발생합니다.
플러시() 작동하지 않는,이 오류를 얻을 :
org.xml.sax.SAXParseException : XML 문서 구조를 시작하고 동일 법인 내에서 끝나야합니다. 플러시없이
() 나는이
org.xml.sax.SAXParseException 얻을 : 파일의 조기 종료를.
스크립트 프로세스는 완료하는 데 180 초가 걸릴 수 있으며 응답을 기다리는 서버는 시간 초과되기 전에 약 30 초 동안 만 대기합니다 (위의 오류의 원인).
이 문제를 해결할 수있는 방법에 대한 의견이 있으십니까? 여기
코드의 일부입니다 : 이것은 내가 수락하고 더 imcoming의 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 파일을 돌려 보내지 않습니다. ACK 제출 후 소켓을 닫고 처리를 계속할 수있는 방법이있어 보내는 서버에서 이러한 시간 초과 문제가 발생하지 않습니까?
입력을 주셔서 감사합니다. setOpt()를 설정하는 데 문제가 있고 다른 fopen 메서드는 XML에서 변경할 수 없습니다. –