2009-09-04 7 views
2

여기 SOAP이있는 OK n00bPHP에서 SOAP 게시물을 얻는 방법은 무엇입니까?

SOAP 사용 방법에 대한 설명이 필요하십니까?

질문 :

나는이 자바 JSP이 게시물은 WSDL 내 PHP 스크립트 (XML 형식 모양),하지만 어떻게 내가 PHP 스크립트에서이받을 수 있나요? WSDL의 URL은 매번 다를 수 있습니다.

나는 아주 간단하다고 생각하지만, 정확히 어떻게 이해하지 못 했는가?

답변

6

당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

 
try {                                           
    if (!($xml = file_get_contents('php://input'))) { 
    throw new Exception('Could not read POST data.'); 
    } 
} catch (Exception $e) { 
    print('Did not successfully process HTTP request: '.$e->getMessage()); 
    exit; 
} 

이것은 $의 XML 변수로 POST 요청의 본문을 읽고 존재하는 경우 오류를 인쇄합니다.

+0

이 "php : // input"을 본 적이 없습니까?이 텍스트는 RAW 게시물 데이터를 읽습니까? –

+0

고마워이 작품은 위대한 –

0

JSP가 POST 요청에서 WSDL을 PHP 스크립트로 보내는 것을 의미합니까? 그렇다면 $ _POST 배열을 살펴보십시오. JSP에서 정확히 보내는 방법을 지정하면 더 도움이 될 것입니다.

어쨌든 일단 PHP 스크립트의 변수에 WSDL URL이 있으면 SoapClient 클래스로 WSDL URL을 가질 수 있습니다.

+0

예이 경로에 대해 얘기하고있어, 어쩌면 내가 그냥 원시 게시물을 소비하고 그런 식으로 구문 분석 수 있을까? –

0

최상의 시나리오를 가정 :

$soapClient = new SoapClient($wsdlUrl, $soapOptions); 
$soapClient->callYourMethod(); 

하지만 SOAP를 사용하는 경우 벽돌 벽을 많이 칠 가능성이있어. 여기에 documentation for SoapClient이 있습니다.

편집 :

그래서, WSDL은 POST-ED입니다. 그런 다음 XML 문자열이 HTTP 본문으로 전송 된 경우 $HTTP_RAW_POST_DATA을 사용하거나 XML 문자열이 다중 요청의 일부로 전송 된 경우 $_FILES 수퍼 글로벌을 사용하여 액세스 할 수 있습니다. 이 같은

뭔가 : always_populate_raw_post_data 설정 php.ini 파일이 설정되어있는 경우

$wsdl = $HTTP_RAW_POST_DATA; 
$wsdlUrl = 'data:text/xml;base64,' . base64_encode($wsdl); 
$soapClient = new SoapClient($wsdlUrl); 

어쨌든, $HTTP_RAW_POST_DATA에만 사용할 수 있습니다. 또한 요청이 여러 부분 인 경우이 설정은 무시되고 $HTTP_RAW_POST_DATA은 채워지지 않지만 $_FILES을 사용하여 게시 된 부분에 액세스 할 수 있습니다. 실제로 $HTTP_RAW_POST_DATA 대신 php://input을 사용할 수도 있습니다.

data URIs 또한 allow_url_fopen이 php.ini에서 켜져있는 경우에만 사용할 수 있습니다.

+0

하지만 어떻게 $ wsdlUrl을 얻을 수 있습니까? 이것은 매번 내가 PHP 스크립트가 –

+0

을 처리 할 필요가있을 때마다 변경됩니다. URL에는 데이터 자체가 포함되어 있습니다. URL 프로토콜은 http가 아니고 데이터입니다. SoapClient 클래스가 이것을 처리하면 가장 좋은 해결책입니다. – gnud

관련 문제