前の記事 ≪:高速&シンプルなJavascriptテンプレートシステム『RND』
次の記事 ≫:タイマーで時間を計れるTODOツール『SlimTimer』

PHPで外部サーバ上のPHP関数を簡単に実行できる『PHPRPC』

2006年08月14日-はてなブックマーク

スポンサード リンク
[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法
PEAR :: PEPr :: Details :: PHPRPC
PHPRPC is a RPC (Remote Procedure Calling) protocol. It uses PHP serialize representation to transfer data, so the complex object such as multidimensional array, associative array and instance of object can be transferred with little redundancy. It was allowed to transfer data in security using XXTEA encryption algorithm.

PHPで外部サーバ上のPHP関数を簡単に実行できる『PHPRPC』。

例えば、パソコンAとBがあった場合、パソコンAでは通常、パソコンA内の関数を実行するのが普通ですが、
PHPRPCを使えば簡単にパソコンA から パソコンB のマシンの関数を呼び出すことが可能になります。

こういう仕組みをリモートプロシージャコールといって、XML-RPCとかSOAPがよく使われます。

XML-RPCでは、HTTPを介してXMLを交換してやりとりします。
PHPRPCでは、PHPのserialize関数によって変換された値をbase64_encodeでエンコードして、その値を使ってサーバ/クライアント間で通信を行います。

具体的に、PHPRPCではクライアント/サーバ間では次のような通信を行います。

クライアントのリクエスト
 phprpc_func=add&phprpc_args=OBrvfpSVqC8b2jNb+KI1ZgEV6LA=&phprpc_encrypt=2&phprpc_ref=false
↓↑
サーバのレスポンス
 phprpc_functions="YToyOntpOjA7czozOiJhZGQiO2k6MTtzOjM6InN1YiI7fQ==";

実際にPHPRPCを実装したプログラムを見ていきましょう。
次のようなプログラムでリモートプロシージャコールが可能になります。

まずはクライアントのコードから( client.php )

<?php
include('phprpc_client.php'
);
$rpc_client = new phprpc_client
();
$rpc_client->use_service('http://localhost/phprpc/server.php'true
);
$rpc_client->encrypt 2
;
echo 
$rpc_client->add(12
);
echo 
"<br />"
;
echo 
$rpc_client->md5hash(12);

echo "<br />";
// error handle
echo "<pre>"
;
$result $rpc_client->mul(12);  
// no mul function
if (
get_class($result) == "phprpc_error") {
    
print_r($result);
}
$result $rpc_client->add(1);    
// wrong arguments
if (
get_class($result) == "phprpc_error") {
    
print_r($result);
}
$rpc_client->use_service('wrong url');  
// wrong url
$result $rpc_client->add(12
);
if (
get_class($result) == "phprpc_error") {
    
print_r($result);
}
echo 
"</pre>"
;
?>

次にサーバのコード ( server.php )

<?php
include('phprpc_server.php'
);
function 
add($a$b
) {
    return 
$a $b
;
}
function 
md5hash($a$b
) {
    
//return $a - $b;
    
return 
md5uniqid("",1) );
}

new 
phprpc_server(array('add''md5hash'));
?>

※client.php/server.php 共にphprpcをincludeする必要があるのでphprpcをダウンロード後、読み込み可能なパスに設置する必要があります。

 client.php にアクセスした際の実行結果は次のようになります。

 

サーバ側で定義した関数に値を渡して正常に結果を取得できている様子が表示されています。

注目すべきは、サーバ側のコードをPHPでそのまま書いてphprpc_serverのコンストラクタに関数名を渡すだけという実装の容易さですね。
クライアントからのRPC呼び出しも非常に簡単。この仕組みによってRPCがもっと手軽になりそうですね。
例えば、レンタルサーバにおいてあるプログラムを他のマシン/サーバから呼び出したりするのも簡単そうです。

ダウンロードパッケージにはPHPだけでなく、C#, Java, JavaScript等のクライアント/サーバプログラムのサンプルも含まれています。
PHPRPCという風にPHPが名前についているけど、言語には依存しないプロトコルという位置付けのようですね。

PHPRPCによるWEBのAPI公開するところなんかも出てくるでしょうか: - )

関連の記事検索:PHP, ライブラリ, 開発, RPC
スポンサード リンク

By.KJ : 2006年08月14日 12:08 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)