Linux/PHP2014. 5. 8. 19:49

php에서 soap 통신을 하기위하여 앞서 php-soap 를 설치하고 

검색을 통해서 알게된 사실이다. 


정확하게 인지한것인지는 모르겠지만.. (만약 잘못된 정보라면 알려주시면 감사드립니다.)


php-4.* 버젼에서는 soap기본지원이 되지 않고 php5.*버젼에서 기본 지원하기때문에 nusoap라는 클래스가 

양쪽 모두 사용가능하여 php soap 통신을 위하여 가장 많이 쓰이며, 간편한 라이브러리라고 한다.


여튼 나는 nusoap클래스를 사용하여 서버, 클라이언트를 테스트 해보았고,

잘 되는것을 확인 하였다.


우선 아래는 찾아봤던 내용의 링크이다.

nusoap 다운로드)

- http://sourceforge.net/projects/nusoap/


예제 )

- http://stackoverflow.com/questions/9130117/nusoap-simple-server

- http://patelmilap.wordpress.com/2011/09/01/soap-simple-object-access-protocol/


soap 관련 설명등)

- http://www.welog.net/gbbs/bbs/board.php?bo_table=php&wr_id=186 (예제)

- http://www.welog.net/gbbs/bbs/board.php?bo_table=php&wr_id=187 (개념)


# nusoap-server.php


$root = $_SERVER["DOCUMENT_ROOT"];

require_once($root.'/Lib/Class/nusoap/nusoap.php');

$server = new soap_server;

$strURL = "www.testNuSoap.com"; #네임스페이스 지정을 해주는것인데 사실 왜 해주는것인지 정확히 모르겠다..

$strNameSpace = $strURL."?wsdl";

$server->configureWSDL("testnusoap",$strNameSpace); //wsdl 생성

$server->register('hello_func',array("name"=>"xsd:string"),array("return"=>"xsd:string")); //함수 등록

# 함수를 등록할때 어는곳에서는 $server->register('hello_func'); 이렇게만 지정을 한다.

# 나의 경우 뒤에 배열 옵션들은 받는 인수, 리턴될 값에 대한 타입을 지정해줬다. 

# 이렇게 하지 않으면 출력이 안되더라.. 왜지?


function hello_func($name){

//  에러시 falt 메시지 전달

    if($name == ''){

    return new soap_fault('Client','','Must supply a valid name.');

    }

    return "hello ".$name;

}

$server->service($HTTP_RAW_POST_DATA);




# nusoap-client.php


ini_set("soap.wsdl_cache_enabled", "0");

$root = $_SERVER["DOCUMENT_ROOT"];

require_once($root.'/Lib/Class/nusoap/nusoap.php');

try{

## 서버 server.php 의 URL을 넘겨줌

$strServerURL = "http://192.168.30.24/soap/nusoap-server.php?wsdl"

$soapclient = new soapclient($strServerURL);

## 서버에서 실행할 함수호출

$parameters = urlencode("Eno");

$result = $soapclient->hello_func($parameters);

echo urldecode($result);

}catch(SoapFault $exception){

echo $exception->getMessage();

}



# 결과 


hello Eno



위 소스는 server.php 에서 wsdl을 생성, client.php에서 해당 내용을 읽어 server.php의 함수를 사용하는것. 이게 주된 내용이다.


nusoap를 사용하기 이전에 php.net에 나와있는것처럼 

SoapServer, SoapClient 클래스를 사용하여 테스트를 했을때는 아래와 같았다.



# soap-server.php


function printString($nCode)

{

if($nCode == "1")

{

return "1입력";

}else{

return "그외 입력됨.";

}

}

 

try {

$server = new SOAPServer(NULL,array('uri' => 'http://192.168.30.24/soap/soap-server.php'));

 

$server->addFunction("printString");

$server->handle();

}catch(SOAPFault $f){

print $f->faultstring;

}



# soap-client.php


$client = new SoapClient(null, array('location' => "http://192.168.30.24/soap/soap-server.php",'uri' => "http://192.168.30.24/soap/soap-server.php"));

echo $return = $client->__soapCall("printString",array("1"));



# 결과

1입력



결국 두개다 server.php에서 선언된 함수 사용이 가능했다.

확인은 했지만.. 실제 적용을 해야하는데 개념이 잘 안잡힌다. OTL 


업무를 진행하고나서 이번 포스트에는 수정해야 할 내용이 많을것같다.


이상 여튼 soap사용법은 이러하다.



Posted by E.No