ホームページ > バックエンド開発 > PHPチュートリアル > PHP での XML-RPC の使用上の注意

PHP での XML-RPC の使用上の注意

WBOY
リリース: 2016-07-30 13:31:43
オリジナル
958 人が閲覧しました
PHP は、XML-RPC と SOAP という 2 つの Web サービス通信プロトコル標準を統合し、XML ベースの HTTP リモート呼び出しを使用して標準メカニズムを提供し、新しいプロトコルを確立する必要をなくします。実際、これは実際の開発アプリケーションで非常に実用的です。たとえば、PC クライアントや一般的な携帯電話クライアントがサーバーと通信する必要がある場合、XML-RPC が適しています。 この方法はあまり使用されませんが、PHP で XML-RPC を使用する方法についていくつかのメモを示します。 基本原則は、XML-RPC は通信に XML を使用するということです。まず、RPC クライアントから渡された XML でカプセル化されたリクエストを処理する RPC サーバーが構築され、処理結果が XML 形式で RPC クライアントに返されます。その後、クライアントは XML を解析して必要なデータを取得します。 XML-RPC のサーバー側には、クライアントが呼び出すための既製の関数が用意されている必要があり、クライアントが送信したリクエスト内の関数およびメソッドはサーバー側のものと一致していなければ、必要な結果が得られません。 まず、PHP が XML-RPC 拡張機能をサポートしていることを確認してください。そうでない場合は、Linux で PHP を再コンパイルしてください。私はUbuntuを使用しているので、sudo apt-get install php5-xmlrpcを実行するだけです。 サーバー セグメント コードと詳細なコメントは次のとおりです。
/* server.php
* @function 提供给RPC客户端调用的函数
* @param   string  $method 客户端需要调用的函数
* @param   array   $params 客户端需要调用的函数的参数数组
* return   string  返回调用结果
*/
function rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == "get") {
$return = 'This data by get method';
} else {
$return = 'Not specify method or params';
}
return $return;
}

//产生XML-RPC的服务器端
$xmlrpc_server = xmlrpc_server_create();
//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
//接受客户端POST过来的XML数据
$request = $HTTP_RAW_POST_DATA;
//执行调用客户端的XML请求后获取执行结果
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
//把函数处理后的结果XML进行输出
header('Content-Type: text/xml');
echo $xmlrpc_response;
//销毁XML-RPC服务器端资源
xmlrpc_server_destroy($xmlrpc_server);
ログイン後にコピー

/* client.php
* @function    提供给客户端进行连接XML-RPC服务器端的函数
* @param   string  $host  需要连接的主机
* @param   string  $port  连接主机的端口
* @param   string  $rpc_server XML-RPC服务器端文件
* @param   $request  封装的XML请求信息
* return   成功返回由服务器端返回的XML信息,失败返回false
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//打开指定的服务器端
$fp = fsockopen($host, $port);
//构造需要进行通信的XML-RPC服务器端的查询POST请求信息
$query = "POST $rpc_server HTTP/1.0\nUser_Agent: XML-RPC Client\nHost: " . $host . "\nContent-Type: text/xml\nContent-Length: " . strlen($request) . "\n\n" . $request . "\n";
//把构造好的HTTP协议发送给服务器,失败返回false
if (!fputs($fp, $query, strlen($query))) {
$errstr = "Write error";
return false;
}
//获取从服务器端返回的所有信息,包括HTTP头和XML信息
$contents = "";
while (!feof($fp)) {
$contents .= fgets($fp);
}
//关闭连接资源后返回获取的内容
fclose($fp);
return $contents;
}
//构造连接RPC服务器端的信息
$host = 'localhost';
$port = 80;
$rpc_server = 'server.php';
//把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是get
$request = xmlrpc_encode_request('rpc_server', 'get');
//调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息
$response = rpc_client_call($host, $port, $rpc_server, $request);
//分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串
$split = "";
$xml = explode($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
//输出从RPC服务器端获取的信息
print_r($response);
ログイン後にコピー

XML は、処理のために xmlrpc_decode 関数を通じて PHP 文字列にエンコードされ、Web サービスの対話全体が完了します。 XML-RPC 関数リファレンス:
  • xmlrpc_decode_request — XMLをPHP独自の型にデコードします
  • xmlrpc_decode — XML を PHP 独自の型にデコードします
  • xmlrpc_encode_request — PHP 値の XML を生成
  • xmlrpc_encode — PHP 値の XML を生成
  • xmlrpc_get_type — PHP 値の xmlrpc のタイプを取得する
  • xmlrpc_is_fault — 配列値が XMLRPC エラーを表すかどうかを判断します
  • xmlrpc_parse_method_descriptions — XML をメソッド記述のリストにデコードします
  • xmlrpc_server_add_introspection_data — 自己記述型ドキュメントを追加
  • xmlrpc_server_call_method — XML リクエストを解析し、メソッド
  • xmlrpc_server_create を呼び出します。 xmlrpc サーバーを作成します
  • xmlrpc_server_destroy — サーバーリソースを破棄します
  • xmlrpc_server_register_introspection_callback — ドキュメント生成用の PHP 関数を登録する
  • xmlrpc_server_register_method — xmlrpc メソッド名に一致する PHP 関数を登録します
  • xmlrpc_set_type — PHP 文字列値の xmlrpc、base64、または datetime のタイプを設定します

  • 上記では、PHP での XML-RPC の使用上の注意事項を、関連する内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート