PHP は、XML-RPC と SOAP という 2 つのプロトコルへのアクセスを統合しており、どちらも xmlrpc 拡張機能に集中しています。また、PHP の PEAR では、PHP 4 であっても PHP 5 であっても、XML-RPC 拡張機能がデフォルトで統合されており、この拡張機能は xmlrpc 拡張機能とは何の関係もなく、XML-RPC プロトコル相互作用を独立して実装できます。は xmlrpc 拡張子ではありません。PEAR::XML-RPC 拡張子を使用することをお勧めします。
Web サービスの概要
Web サービスは、異種システムの通信のために作成されました。その基本的な考え方は、XML ベースの HTTP リモート呼び出しを使用して標準メカニズムを提供し、新しいプロトコルを確立する必要をなくすことです。現在、Web サービス通信には 2 つのプロトコル標準があり、1 つは XML-RPC、もう 1 つは SOAP です。 XML-RPC は比較的単純で以前に登場しましたが、SOAP はより複雑で、主に安定性、堅牢性、セキュリティ、および複雑な対話が必要な場合に使用されます。
ここでは主に XML-RPC を使用して Web サービスの対話プロセスを簡単に説明します。詳細については、PHP マニュアルを参照することをお勧めします。
xmlrpc 拡張機能をインストールします。
xmlrpc php 拡張機能がシステムにインストールされていない場合は、正しくインストールしてください。
Windows プラットフォームでは、まず、PHP インストール ディレクトリにある拡張子 php_xmlrpc.dll を C:Windows または C:Winnt ディレクトリに配置します (PHP4 の拡張子は C:phpextensions ディレクトリにあり、PHP5 の拡張子は C:phpextensions ディレクトリにあります)。 C:phpext ディレクトリにあります)、C:Windowsphp.ini または C:Winntphp.ini の extension=php_xmlrpc.dll の前にあるセミコロン「;」を削除して、Web サーバーを再起動します。 XML-RPC プロジェクトがあるかどうかで、xmlrpc 拡張機能が正しくインストールされているかどうかを判断できます。
Unix/Linux プラットフォームでは、xmlrpc 拡張機能がインストールされていない場合は、PHP を再コンパイルし、構成時に --with-xmlrpc オプションを追加して、phpinfo() をチェックして xmlrpc が正常にインストールされているかどうかを確認してください。
(注: 以下の操作は、xmlrpc 拡張の通常のインストールに基づいています。必ず正しくインストールしてください。)
XML-RPC の動作原理
XML-RPC は、一般に、プロセス全体が通信に XML を使用することを意味します。まず、RPC クライアントから渡された XML でカプセル化されたリクエストを処理する RPC サーバーが構築され、処理結果が XML 形式で RPC クライアントに返されます。その後、クライアントは XML を解析して必要なデータを取得します。
XML-RPC のサーバー側には、クライアントが呼び出すための既製の関数が用意されている必要があり、クライアントが送信したリクエスト内の関数およびメソッドはサーバー側のものと一致していなければ、必要な結果が得られません。
以下に、プロセス全体を説明する簡単なコードを作成します。
XML-RPC 練習
サーバーは、xmlrpc_server_create 関数を使用してサーバーを生成し、公開する必要がある RPC 呼び出しインターフェイスを登録し、RPC クライアントから XML データの POST を受け入れ、処理し、処理結果をクライアントに表示します。 XML の形式で。
コードは次のとおりです: rpc_server.php
<?php
/**
* 関数: RPC クライアントによって呼び出されるために提供される関数
* パラメータ:
* $method はクライアントが呼び出す必要がある関数です
* $params は、クライアントが呼び出す必要がある関数のパラメータ配列です。
* Return: 指定された呼び出し結果を返します
*/
関数 rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == "get"){
$return = ''getメソッドによるこのデータ'';
}それ以外{
$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");
// クライアントからの XML データ POST を受け入れます。
$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);
?>
サーバー側を構築したら、RPC クライアントを構築しましょう。クライアントは、大まかに Socket を介して XML-RPC サーバーのポート 80 にアクセスし、呼び出す必要がある RPC インターフェイスを XML にカプセル化し、POST リクエストを通じて RPC サーバーに送信し、最終的にサーバーから返された結果を取得します。
コードは次のとおりです: rpc_client.php
<?php
/**
※機能:XML-RPCサーバーに接続するためにクライアントに提供される機能
* パラメータ:
* $host 接続する必要があるホスト
* $port ホストに接続するポート
* $rpc_server XML-RPC サーバー側ファイル
* $request カプセル化された XML リクエスト情報
* 戻り値: 接続が成功した場合は、サーバーから返された XML 情報が返されます。接続が成功した場合は、false が返されます。
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//指定されたサーバーを開きます
$fp = fsockopen($host, $port);
//通信する必要のあるXML-RPCサーバーのクエリPOSTリクエスト情報を構築します。
$query = "POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC ClientnHost: ".$host."nContent-Type: text/xmlnContent-Length: ".strlen($request)."n n".$request."n";
//構築された HTTP プロトコルをサーバーに送信し、失敗した場合は false を返します。
if (!fputs($fp, $query, strlen($query))) {
$errstr = "書き込みエラー";
false を返します。
}
// HTTP ヘッダーや XML 情報など、サーバーから返されたすべての情報を取得します
$contents = '''';
while (!feof($fp)){
$contents .= fgets($fp);
}
//接続リソースを閉じた後、取得したコンテンツを返します
fclose($fp);
$content を返します。
}
//RPCサーバーに接続するための情報を構築します
$host = ''ローカルホスト'';
$ポート = 80;
$rpc_server = ''/~heiyeluren/rpc_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 version="1.0" encoding="iso-8859-1"?>'';
$xml = 爆発($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
//RPCサーバーから取得した情報を出力します
print_r($response);
?>
大まかに言えば、上記の例は、rpc_server というメソッドを送信し、パラメータは get で、サーバーから返される XML データは次のとおりです
。 iso-8859-1 "?>
<メソッド応答>
<パラメータ>
<パラメータ>
<値>
<string>get メソッドによるこのデータ</string>
</値>
</param>
</params>
xmlrpc_decode
関数を使用してこの XML を PHP 文字列にエンコードし、自由に処理できるようになり、Web サービスの対話全体が完了します。
結論
XML-RPC であれ SOAP であれ、リモート プロセス呼び出しを安定かつ安全に実行してプロジェクトを完了できれば、Web サービス全体は成功します。さらに、可能であれば、PEAR で XML-RPC を使用して上記と同様の操作を実装することもできます。その方が簡単で適切な場合があります。
Web サービスの対話には XML-RPC を使用してください。詳細な情報が必要な場合は、マニュアルを参照することをお勧めします。記事が間違っている場合は、修正してください。
この記事は、PHP 情報の元のリンクからのものです: http://www.phpchina.com/html/84/n-33884.html