푸른청년 푸르게 살고있나?  
home | 살아가기 | news | 세상보기 | tip&tech | 방명록 |  
   전체
   asp
   php
   jsp
   mssql
   mysql
   informix
   linux
   unix
   win2000
   javascript
   html
   oracle
   java
   etc
    
:: Tip&Tech > php
pear의 xmlrpc패키지를 이용한 리모트 디비에 인서트 하기
보통은 php최신버전에 pear의 xml 패키지가 디폴트로 깔려있다.
없으면 http://pear.php.net에서 다운로드 받아 설치한다.
설치방법은 이전 팁에서 설명했으니 참조하시길..

원리는 xml표준포멧으로 리모트서버와 통신하는 규약을 정해놓은걸 xmlrpc프로토콜이라고 한다.
서버와 클라이언트가 있고 서버에서 제공하는 함수를 클라이언트에서 호출할수 있다.
소켓통신과 비슷할수 있겠지만 xmlrpc함수를 지원하는 언어면 어떤 환경에서도 가능하다 하겠다.

아파치 베이직 인증을 통해 인증도 걸수있다.


서버프로그램이다
/usr/local/php/lib/php/XML/RPC/Server.php 파일을 참조하여 프로그래밍한다.

<?php
include "/home/cms/phpinc/DBConn.php";
include "/home/cms/phpinc/bluesoul/batch_common.php";
include "/home/cms/phpinc/bluesoul/batch_config.php";

require_once 'XML/RPC/Server.php';


//인서트 함수다.
function insertTableWorkRss($params) {
global $XML_RPC_erruser,$DBConn;

if ($err) {
// this is an error condition
return new XML_RPC_Response(0, $XML_RPC_erruser+1, // user error 1
"There's a problem, Captain");
} else {
//파라미터 값을 배열로 읽어온다
//scalarval() : php언어에 맞게 디코딩, base64도 자동디코딩
$param = $params->getParam(0);
$writer_name = $param->scalarval();

$param = $params->getParam(1);
$user_id = $param->scalarval();

$param = $params->getParam(2);
$category_name = $param->scalarval();

$param = $params->getParam(3);
$category_id = $param->scalarval();

$param = $params->getParam(4);
$title = $param->scalarval();

$param = $params->getParam(5);
$content = $param->scalarval();

$param = $params->getParam(6);
$service_url = $param->scalarval();

$param = $params->getParam(7);
$pubdate = $param->scalarval();

$_pubdate = date('Y-m-d H:i:s',$pubdate);
//echo "writer_name :". $writer_name;

$title = addslashes($title);
$content = addslashes($content);

$sql = "insert into work_rss ";
$sql .= "(num,writer_name,user_id,category_name,category_id,title,content,service_url,pubdate,regdate) values ";
$sql .= "(0,'$writer_name','$user_id','$category_name','$category_id','$title','$content','$service_url','$_pubdate',NOW())";

$result = @$DBConn->query($sql);

if(!$result){
$str = addslashes($DBConn->error);
//$str = $qdesk_id. " : ".$str;
echo $str;
printLog($str);
}

//리턴값을 돌려준다.
$val = new XML_RPC_Value(1, 'boolean');
return new XML_RPC_Response($val);
}
}

$server = new XML_RPC_Server(
array(
'insertTable.func' =>
array(
'function' => 'insertTableWorkRss'
)
)
);
?>


클라이언트 프로그램이다.
<?php
require_once 'XML/RPC.php';

//인증
$username = "xxx";
$password = "xxx";

//한글 같은경우 깨지는 걸 막기위해 base64 인코딩을 한다.
$_writer_name = new XML_RPC_Value($writer_name,'base64');
$_user_id = new XML_RPC_Value($user_id,'string');
$_category_name = new XML_RPC_Value($category_name,'base64');
$_category_id = new XML_RPC_Value($category_id,'string');
$_title = new XML_RPC_Value($title,'base64');
$_content = new XML_RPC_Value($content,'base64');
$_service_url = new XML_RPC_Value($service_url,'string');
$_pubdate = new XML_RPC_Value($pubdate,'dateTime.iso8601');

$params = array($_writer_name,$_user_id,$_category_name,$_category_id,$_title,$_content,$_service_url,$_pubdate);

//리모트함수를 호출하는 부분이다.
$msg = new XML_RPC_Message('insertTable.func', $params);

//리모트서버의 아이피와 프로그램 경로다
$cli = new XML_RPC_Client('/xmlrpc/xmlrpc_server.php', '192.168.1.36');

//디버깅값을 보여준다
//$cli->setDebug(1);

//아파치 인증
$cli->setCredentials ($username, $password);

$resp = $cli->send($msg);

if (!$resp) {
echo 'Communication error: ' . $cli->errstr;
exit;
}

if (!$resp->faultCode()) {
$val = $resp->value();
echo $val->scalarval();
} else {
/*
* Display problems that have been gracefully cought and
* reported by the xmlrpc.php script.
*/
echo 'Fault Code: ' . $resp->faultCode() . "\n";
echo 'Fault Reason: ' . $resp->faultString() . "\n";
}
?>


클라이언트 페이지를 호출했을때의 예제화면이다.
디버깅을 주석처리 하면 리턴값만 뿌려준다.
http://nms.hani.co.kr/recv/xmlrpc_client.php

날짜: 2005-09-13 11:10:13, 조회수: 65535

다음글 문자열이 utf-8인지 아닌지 체크하는 함수
이전글 pear패키지를 이용한 rss뉴스 읽기

꼬리말
글쓴이 비밀번호 #스팸글방지(주인장 닉네임을 쓰시오)

  
since by 2003.03.23 / 3th 2005.07.26 / 4th 2009.04.22 made by bluesoul