[우분투] PHP5 에서 XML-RPC 이용하기 Develop Tip

php5가 우분투 (시험은 12.04 LTS 서버 버전에서 했습니다)에
LAMP 서버로 설치되어 있습니다.

아주 쉽습니다.

XML-RPC의 장점으로는 아주 많은 언어로 구현되어 있어
임의의 포트로 XML 형식의 RPC가 구현되어 있다는 것입니다.
단점으로 XML 의 파싱 속도가 문제 되신다는 분도 계셔서
JSON 등의 간략화된 마샬(언마샬)링 방법을 사용하시기도 하지만
초당 수천번 이상 호출되는 것이 아니고 사용자 인터페이스 등에서
사용자가 호출할 때 불리는 정도라면 XML-RPC도 충분히 잘 이용할 수 있겠습니다.

각설하고, PHP5를 이용하여 웹GUI를 많이 구현하는데요,
PHP5 스크립트에서 XML-RPC를 호출해 보았습니다.

일단 설치는 다음과 같은 build.sh 파일을 하나 만듦니다.

$ cat build.sh
#!/bin/bash
sudo apt-get install php5-xmlrpc
wget http://ripcord.googlecode.com/files/ripcord-1.1.tgz
tar xvfz ripcord-1.1.tgz
sudo mkdir -p /usr/share/php
pushd ripcord-1.1
sudo cp *.php /usr/share/php
popd
rm -rf ripcord-1.1*


$ bash -x build.sh
(-x 옵션은 디버깅할 때 유용합니다)

이렇게 수행하면 설치는 끝납니다.

이제 client.php 를 다음과 같이 만듦니다.

$ cat client.php
<?
    require_once('ripcord.php');
    $url = 'http://127.0.0.1:5500/your_service';
    $mgr = ripcord::xmlrpcClient( $url );

    ###########################################################################
    $rc  = $mgr->ping();
    echo "$rc = mgr->ping()\n";
?>

$ php client.php

위와 같은 방법으로 수행하면 잘 됩니다.

파이썬에서 Class 인스턴스를 XML-RPC로 호출하면 
XML로 마샬링을 시킬 때 python의 Dictionary 형식으로 
자동으로 바뀌는데 PHP에서는 Array (파이썬의 Dictionary와 동일)로 변환됩니다.
그런데 인스턴스에 따라 그 속성 중에 제대로 마샬링 안될 수도 있는데,
이 경우에는 약간의 수작업으로 인스턴스 중 필요한 부분만 dictionary로 변환시켜
XML-RPC로 return 시켜 주면 됩니다...


어느분께는 도움이 되셨기를...

덧글

  • oops 2012/11/07 15:07 # 삭제 답글

    큰 도움이 되고 있습니다, 감사합니다,~
  • 지훈현서아빠 2012/11/07 15:34 #

    도움이 되셨다니 저의 보람입니다~ ^^
댓글 입력 영역

구글애드텍스트