例 – XML_RPC パッケージの利用例

クライアントを使用して、PEAR の最新情報を取得する

<?php
require_once 'XML/RPC.php';

/*
 * いちばん最近にリリースされた PEAR パッケージの情報を取得する
 */
$params = array(new XML_RPC_Value(1'int'));
$msg = new XML_RPC_Message('release.getRecent'$params);

$cli = new XML_RPC_Client('/xmlrpc.php''pear.php.net');

// デバッグを有効にしたい場合は...
// $cli->setDebug(1);

// 余分な行をそのままにしておきたいのなら...
// 注意: プロパティ $remove_extra_lines はバージョン 1.4.6 で追加されました。
// $cli->remove_extra_lines = false;

// サーバに送信する XML を調べるのなら...
// $msg->createPayload();
// logit($msg->payload);  // 仮の関数

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

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

if (!
$resp->faultCode()) {
    
$val $resp->value();
    
$data XML_RPC_decode($val);
    echo 
$data[0]['name'] . ' is at version ' $data[0]['version'];
} else {
    
/*
     * xmlrpc.php スクリプトが遭遇した問題を
     * 報告する
     */
    
echo 'Fault Code: ' $resp->faultCode() . "\n";
    echo 
'Fault Reason: ' $resp->faultString() . "\n";
}

// サーバからの XML 応答を調べるのなら...
// 注意: プロパティ $response_payload はバージョン 1.4.6 で追加されました。
// logit($msg->response_payload);  // 仮の関数
?>

クライアント - サーバ の組み合わせ

これがサーバ側のスクリプトです。localhost の web サーバの ドキュメントルートに、xmlrpc.php という名前で設置します。

<?php
require_once 'XML/RPC/Server.php';

function 
returnTimes2($params) {
    
$obj = new some_class_name;
    return 
$obj->returnTimes2($params);
}

class 
some_class_name {
    function 
returnTimes2($params) {
        
$param $params->getParam(0);

        
// このエラーチェック構文は、リリース 1.3.0 で追加されました
        
if (!XML_RPC_Value::isValue($param)) {
            return 
$param;
        }

        
$val = new XML_RPC_Value($param->scalarval() * 2'int'); 
        return new 
XML_RPC_Response($val);
    }
}

$some_object = new some_class_name;


/*
 * ディスパッチマップと XML_RPC サーバインターフェイスを確立します
 */
$server = new XML_RPC_Server(
    array(
        
'function_times2' => array(
            
'function' => 'returnTimes2'
        
),
        
'class_paamayim_nekudotayim_times2' => array(
            
'function' => 'some_class_name::returnTimes2'
        
),
        
'class_times2' => array(
            
'function' => array('some_class_name''returnTimes2')
        ),
        
'object_times2' => array(
            
'function' => array($some_object'returnTimes2')
        ),
    ),
    
1  // serviceNow
);
?>

そしてこちらがクライアント側のスクリプトです。

<?php
require_once 'XML/RPC.php';

$input 8;
$params = array(new XML_RPC_Value($input'int'));
$msg = new XML_RPC_Message('function_times2'$params);

$cli = new XML_RPC_Client('/xmlrpc.php''localhost');
// $cli->setDebug(1);
$resp $cli->send($msg);

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

if (!
$resp->faultCode()) {
    
$val $resp->value();
    echo 
$input ' times 2 is ' $val->scalarval();
} else {
    
/*
     * xmlrpc.php スクリプトが遭遇した問題を
     * 報告する
     */
    
echo 'Fault Code: ' $resp->faultCode() . "\n";
    echo 
'Fault Reason: ' $resp->faultString() . "\n";
}
?>

自動的なデータのエンコード

XML_RPC_encode() 関数は、 PHP のデータを自動的に XML_RPC ライブラリの形式に変換します。

<?php
require_once 'XML/RPC.php';

$data fetch_row_from_db();  //  仮の関数

$params = array(XML_RPC_encode($data));
$msg = new XML_RPC_Message('some_function_name'$params);

$cli = new XML_RPC_Client('/xmlrpc.php''pear.php.net');
$resp $cli->send($msg);

// 他の例についても同様に処理します...
?>
XML_RPC のサポートを受けるには (Previous) パッケージ内のクラスのドキュメント (Next)
Last updated: Thu, 18 Dec 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.