ホームページ バックエンド開発 PHPチュートリアル XML テクノロジーを使用して PHP でリモート サービスを構築する (転送) - PHP チュートリアル、PHP アプリケーション

XML テクノロジーを使用して PHP でリモート サービスを構築する (転送) - PHP チュートリアル、PHP アプリケーション

Jun 23, 2016 pm 02:29 PM
PHPアプリケーション

PHP で XML テクノロジーを使用してリモート サービスを構築する

将来の Web はサービス中心の Web になり、xml_rpc 標準によりサービスの作成と適用が非常に簡単になります。この記事では、xml_rpc 標準とその PHP 実装を紹介し、例を通じて PHP で xml_rpc サービスとクライアント プログラムを開発する方法を示します。

1. サービス Web
コンテンツ プロバイダーが採用するシンプルな手法から、uddi の将来のビジョン (普遍的な記述、発見、統合) まで、業界では「サービス Web」について多くの説明やコメントが行われています。 Web の初期段階では、Web は単なる文書の収集および配布センターであり、閲覧可能な情報のみを提供していました。 Web の発展に伴い、Web 上でのサービスの実行はますます魅力的になってきています。将来的には、Web は企業が顧客や他の企業に便利なサービスを提供する媒体となるでしょう。 b2b モデルと b2c モデルのコラボレーションは、サービス Web とみなすことができます。

非常に重要な質問は、Web 上でどのようなサービスを提供できるかということです。 Web は多くのサービスを提供できますが、その中には現在すでに使用されているサービスもあれば、近い将来登場するサービスもあります。問題を説明するために、Web を通じて提供できるサービスの小さなリストを以下に示します:

トピック指向の垂直型検索エンジン。
ユーザーが情報を見つけるためのナレッジベース。
ユーザーが質問できるエキスパートシステム。
銀行サービス。
ニュースおよび情報公開サービス。
デジタル決済関連サービス。
グラフィック処理サービス。
健康とウェルネスのサービス。

では、企業や組織が Web を通じてサービスを提供する正しい方法は何でしょうか?これは非常に重要な質問です。現在、HTML インターフェイスを提供するサービスや、ドキュメントの形式でサービスを提供するサービスがありますが、サービス インターフェイスの背後には何が隠されているのでしょうか。 Web の覇権を争っているのは Web ブラウザだけではありません。携帯電話、ハンドヘルド デバイス、電子レンジなどのデバイスはすべて、Web へのアクセス、データベースのクエリ、データの変換、情報の抽出などを望んでいます。真のサービス Web を実現するには、プレゼンテーション層 (html) の下に別の層が必要です。

2. xml_rpc 標準
xml は、おそらく過去 10 年間で最も重要な標準であり、企業がサービス環境を構築するための基礎となります。サービス Web を構築するには、xml_rpc 標準を学ぶ必要があります。xml_rpc は Web 上にサービスを配置するのに役立つだけでなく、xml_rpc がすでに確立されている標準であり、簡単に採用できるためです。 B2Bサービスでは、サービスを提供するための基準が非常に重要であり、その基準を共同で遵守する企業は、他社が提供するサービスを活用することで急成長を遂げることができます。真にサービスを提供する Web がさまざまな民間サービス標準に基づいて構築できることを想像することは不可能です。サービスには従うことができる標準が必要です。

xml_rpc は、インターネット分散処理の標準です。 rpc は、リモート プロシージャ コールの略語で、他のマシン上に存在し、他の言語で記述されたプロシージャを呼び出すために使用されるリモート呼び出しメカニズムです。リモート プロシージャ コールは、分散コンピューティングの重要な柱です。たとえば、分散コンピューティング環境では、他のマシン上で実行される加算および減算演算を実行するプロセスを見つけて利用できます。加算演算を実行するプロセスは APL で記述され、減算演算を実行するプロセスは rs6000 マシン上で実行されます。おそらく C で書かれており、Unix 上で実行されている可能性があります。このような分散計算機を使用したい他の開発者もそれらを使用することも、別のより優れた計算機を選択することもできます。

RPC ではプロシージャが最も重要なコンポーネントであり、サーバーはクライアントが呼び出すためのプロセスを提供します。プロシージャはパラメータを受け取り、結果を返すことができます。 xml_rpc は、プロトコル キャリアとして http を使用し、データを送受信するための XML ボキャブラリを通じて rpc メカニズムを実装します。 xml_rpc サーバーは、xml_rpc 要求を受信し、xml_rpc 応答を返します。xml_rpc クライアント プログラムは、xml_rpc 要求を送信し、xml_rpc 応答を受信します。サーバーとクライアントは、xml_rpc 標準の要件に従って応答と要求を処理する必要があります。

3. xml_rpc プロトコル
完全な xml_rpc 仕様は、http://www.xmlrpc.com/spec で参照できます。以下にその要点を解説します。

3.1 xml_rpc リクエスト

xml_rpc リクエストは http post リクエストである必要があり、その本文は XML 形式です。形式の要求 XML 部分は次のとおりです:

Xml version = "1.0"?>

请请请请 >> 请请请请请请请请 请请 请 请 请请 请 请 请 请 请 请 请 请 请 > 请 请 > > 请 请 请 请 请 请 请 请 请请 请 请 请 请 请 请 请 请 请 请 请 请” E 41





データの送信先を指定する URL はここでは指定されません。サーバーが rpc 処理専用に使用される場合は、「/」になる可能性があります。上記の XML ドキュメントのペイロードは「メソッドコール」構造です。 methodcall には、呼び出されるメソッドを説明する文字列を含む「methodname」サブ要素が含まれている必要があります。 「メソッド名」の内容をどのように解釈するかは完全にサーバー次第です。たとえば、実行可能ファイルの名前、データベース内のレコードの名前、またはその他の名前にすることができます。プロシージャがパラメータを受け入れる場合、「methodcall」には「params」要素といくつかの「param」子要素を含めることができます。各「param」要素には、型記述子を含む値が含まれます。型記述子は次の表に示すとおりです。


マークの説明
<i4> または <int> 12 などの 4 バイトの符号付き整数
<boolean > 0 (false)、または 1 (true)
文字列、例: "hello world"
倍精度符号付き浮動小数点数、例: -12.214
日付/時刻、例: 19980717t14: 08:55
<base64> ew91igbid0ihjlqgdghpcye などの Base64 でエンコードされたバイナリデータ


3.1.1 構造体

値は構造体にすることができ、その構造体は 要素で記述されます。各 には複数の が含まれ、各 には が含まれます。以下は 2 つの要素から構成される構造体です:



name
member1


member2
19




には、 または を含むその他のタイプを含めることができます。

3.1.2 配列

値は配列型にすることができ、配列は 要素で記述されます。各 要素には 要素が含まれており、 要素には任意の数の 要素を含めることができます。以下は配列要素の例です:



0
9
<value><string>hello</string></value>
</data>
</array>


要素には名前がありません。前の例で示したように、 要素の値はさまざまなタイプにすることができます。 要素はネストすることができ、任意の または上記で紹介した のような他の型を含めることができます。

3.2 xml_rpc レスポンス

xml_rpc レスポンスは http レスポンスであり、コンテンツ タイプは text/xml です。レスポンスボディの形式は以下のとおりです。

<?xml version="1.0"?>
<methodresponse>
<params>
<param>
<value><string>abcdefg</string></value>





には、プロシージャ呼び出しが成功したかどうかに応じて、 構造が含まれる場合があります。 の構造は XML リクエストと同じです。 要素の構文は次のとおりです。 </name>
<値><int>4</int></value>
</member>
<member>
<name>faultstring</name>
<値><文字列>error!</string ></value>
< /member>
</struct>
</value>
</fault>


4. xml_rpcをベースにしたWebサービス
サービスの構築や利用にはxml_rpcを使うととても便利です。企業は、提供するさまざまなサービスのために xml_rpc サーバーを導入し、ユーザー、クライアント ソフトウェア、およびクライアント企業は、このサービスを使用してエンド ユーザー向けのハイエンド サービスやアプリケーションを構築できます。より効果的で、安価で、高品質なサービスを提供するためのこの競争により、アプリケーション サービスの品質が大幅に向上します。

しかし、Web 上でサービスをカタログ化、インデックス化、検索する方法など、解決すべき問題がまだいくつかあります。 uddi はこの問題を解決しようとしていますが、標準は単純ではなく、それに対する業界の対応はまだ明確ではありません。ただし、企業内で xml_rpc を適用すると、コードの再利用性が向上するだけでなく、今後数年間で確実に重要な知識の宝となる新しい分散コンピューティング モデルがもたらされます。 xml_rpc の開発は、分散コンピューティングの問題を解決することから始まり、サービス Web の基本レベルとなり、非常に良いスタートを切りました。この標準に対する人々の熱意に確実に従うことになるでしょう。ここでは、xml_rpc の実際のアプリケーションを見てみましょう。

4.1 phpでxml_rpcを適用する

PHP は、Web サービスを提供するための理想的な言語です。 PHP コードを記述して適切な場所に配置するだけで、URL を通じて「呼び出す」ことができるサービスがすぐに作成されます。 php での xml_rpc の実装は複雑な場合もあれば単純な場合もありますが、多くのオプションがあります。ここでは、役に立つ情報会社からの xml_rpc 実装を選択します。そのコードとドキュメントは http://xmlrpc.usefulinc.com/ からダウンロードできます。

この xml_rpc 実装の基本クラスには 2 つのファイルが含まれます:

xmlrpc.inc: xml_rpc の php クライアントに必要なクラスが含まれます

xmlrpcs.inc: xml_rpc の php サーバーに必要なクラスが含まれます

4.2 クライアント

xml_rpc クライアントの作成とは、次のことを意味します:

1. xml_rpc リクエスト メッセージを作成します

2. xml_rpc メッセージを作成します

4. 応答を取得します

6.応答を解釈します

次の例を参照してください:

<?php
$f=new xmlrpcmsg(examples.getstatename,array(new xmlrpcval(14, "int")));
$c=new xmlrpc_client("/ rpc2", "betty.userland.com", 80);
$r=$c->send($f);
$v=$r->value();
if (!$r-> ;faultcode( )) {
print "ステータスコード" . $http_post_vars["stateno"] . "Yes" .
$v->scalarval() . "
";
print "


サーバーの応答< br><pre>" .
htmlentities($r->
n";
} else {
print "エラー: ";
print "コード: " . $ r->faultcode() .
" 理由: " .$r->faultstring()."
";
}
?>


この例では、最初に呼び出しを作成します "例 .getstatename" メソッドを実行し、値 14 の "int" 型の整数パラメータを渡しました。次に、呼び出す URL (パス、ドメイン、ポート) を記述するクライアントを作成します。次に、メッセージを送信し、応答オブジェクトを受信して​​、エラーをチェックしました。エラーがなければ結果を表示します。

RPC クライアント プログラムを作成するときに使用される主な関数は次のとおりです:

クライアントを作成するには:

$client=new xmlrpc_client($server_path, $server_hostname, $server_port);

メッセージの送信方法は次のとおりです。
$response=$client->send($xmlrpc_message);

xmlrpcresp のインスタンスを返します。渡すメッセージは、次のメソッドで作成された xmlrpcmsg のインスタンスです:

$msg=new xmlrpcmsg($methodname, $parameterarray);

methodname は呼び出されるメソッド (プロセス) の名前です。 parameterarray は、xmlrpcval オブジェクトの PHP 配列です。例:

$msg=new xmlrpcmsg("examples.getstatename", array(new xmlrpcval(23, "int")));

xmlrpcval オブジェクトは次の形式で作成できます:

<?php
$ myval=new xmlrpcval($stringval);
$myval=new xmlrpcval($scalarval, "int" | "boolean" | "string" | "double" | "datetime.iso8601" | "base64");
$myval= new xmlrpcval( $arrayval, "array" | "struct");
?>


最初の形式は、xmlrpc 文字列値を作成します。 2 番目の形式は、値と型を説明する値を作成します。 3 番目の形式は、配列のような構造で他の xmlrpc 値を結合することによって複雑なオブジェクトを作成します。例:

<?php
$myarray=new xmlrpcval(array(new xmlrpcval("tom"), new xmlrpcval("dick) "),new xmlrpcval("harry")), "array");
$mystruct=new xmlrpcval(array(
"name" => new xmlrpcval("tom"),
"age" => new xmlrpcval (34, "int"),
"geek" => new xmlrpcval(1, "boolean")),"struct");
?>


の send メソッドを呼び出すことで、応答オブジェクトは xmlrpcresp 型になります。顧客オブジェクトを取得します。サーバー側では、次のように xmlrpcresp 型のオブジェクトを作成できます:

$resp=new xmlrpcresp($xmlrpcval); クライアント側では、次のメソッドを使用して応答から xmlrpcval を取得します:

$xmlrpcval =$resp ->value();

次に、次のメソッドを使用して、応答結果を記述する php 変数を取得できます。

$scalarval=$val->scalarval(); 複雑なデータ型の場合、非常に便利な関数が 2 つあり、どちらも xmlrpc.inc にあります:

$arr=xmlrpc_decode($xmlrpc_val);

この関数は、xmlrpcval 変数 $xmlrpc_val のデータを含む php 配列を返します。データはPHP自体が持つ変数型に変換されています。

$xmlrpc_val=xmlrpc_encode($phpval);この関数は、$phpval で記述された PHP データを含む xmlrpcval 型の値を返します。配列と構造体の場合、このメソッドにより再帰的分析が可能になります。非基本データ型 (base-64 データや日付時刻データなど) はサポートされていないことに注意してください。

4.3 サーバーサイド

xmlrpcs.inc が提供するクラス作成サービスを使用するのは非常に簡単です。サービスを作成するには、次のように xmlrpc_server のインスタンスを作成します:

<?php
$s=new xmlrpc_server( array("examples.myfunc" =>
array("function" => "foo")) );
?>

xmlrpc_server コンストラクターに渡されるのは、連想配列の連想配列です。プロシージャ「examples.myfunc」は「foo」関数を呼び出します。このため、foo はメソッド ハンドルと呼ばれます。

メソッドハンドルの記述は簡単です。メソッド ハンドルのスケルトンは次のとおりです:

<?php
function foo ($params) {
global $xmlrpcerruser; // ユーザー エラー コード値を導入します
// $params は xmlrpcval オブジェクトの配列です
if ( $err) {
// エラー条件
return new xmlrpcresp(0, $xmlrpcerruser+1, // ユーザーエラー 1
"error!");
} else {
// 成功
return new xmlrpcresp(new xmlrpcval("問題ありません!" , "string"));
}
}
?>


プログラムがエラーをチェックし、エラーがある場合はエラーを返します ($xmlrpcerruser+1 から開始します)。それ以外の場合は、すべてが正常であれば、成功メッセージとして説明操作 xmlrpcresp が返されます。

5. アプリケーション例
次の例では、サービスを構築します。指定された値 n に対して、サービスは n*2 を返します。クライアントはこのサービスを使用して 5*2 の値を計算します。

サーバー側のコードは次のとおりです:

include("xmlrpc.inc");
include("xmlrpcs.inc");
function foo ($params)
{
global $xmlrpcerruser; // ユーザーの紹介 エラー コード値
// $params は xmlrpcval オブジェクトの配列です
$vala=$params->params[0];
$sval=$vala->scalarval();
$ret=$ sval*2;
return new xmlrpcval($ret, "int"));
}
$s=new xmlrpc_server( array("product" =>
array("function" =>"foo") )));
?>


クライアントコードは次のとおりです:

<?php
include("xmlrpc.inc");
if ($http_post_vars["number"]!="") {
$ f=new xmlrpcmsg(product ,array(new xmlrpcval($http_post_vars["number"], "int")));
$c=new xmlrpc_client("/xmlrpc/servfoo.php", "luigi.melpomenia.com. ar", 80);
$c->setdebug(0);
$r=$c->send($f);
$v=$r->value();
if (!$ r->faultcode( )) {
print "number ". $http_post_vars["number"] . " は " .
$v->scalarval() ";
print "
結果サーバーから!<br ><pre>" .
htmlentities($r->serialize()). "</pre><hr>n";
} else {
print "操作が失敗しました: ";
print "コード: " . $ r->faultcode() .
" 理由: " .$r->faultstring()."<br>";
}
}
print "

<input name="number" value="${number}">
<input type="submit" value="go" name="submit"></form><p>
値を入力してください";
? >


結論 : xml_rpc サービスの操作には、分散プロセスのカタログ作成とインデックス作成メカニズム、プログラミング言語で xml_rpc を処理するためのより優れたインターフェイスなど、他の多くのインフラストラクチャと基本タスクも含まれます。 xml_rpc とサービス Web に関するレポートは数多くあります。その開発に注目してみましょう。
記事の構成: Western Digital

上記の情報は記事本文の不可欠な部分です。この記事を転載したい場合は、上記の情報を保存してください。ありがとうございます!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP アプリケーション: 現在の日付をファイル名として使用します PHP アプリケーション: 現在の日付をファイル名として使用します Jun 20, 2023 am 09:33 AM

PHP アプリケーションでは、現在の日付をファイル名として使用してファイルを保存またはアップロードする必要がある場合があります。日付を手動で入力することもできますが、現在の日付をファイル名として使用する方が便利で、速く、正確です。 PHP では、date() 関数を使用して現在の日付を取得できます。この関数の使用方法は次のとおりです: date(format, timestamp); ここで、format は日付フォーマット文字列、timestamp は日付と時刻を表すタイムスタンプです。このパラメータが渡されない場合は、それが使用されます。

チュートリアル: Firebase Cloud Messaging を使用して、PHP アプリケーションにスケジュールされたメッセージ プッシュ機能を実装する チュートリアル: Firebase Cloud Messaging を使用して、PHP アプリケーションにスケジュールされたメッセージ プッシュ機能を実装する Jul 25, 2023 am 11:21 AM

チュートリアル: Firebase Cloud Messaging を使用して、スケジュールされたメッセージ プッシュ機能を PHP アプリケーションに実装する 概要 Firebase Cloud Messaging (FCM) は、Google が提供する無料のメッセージ プッシュ サービスで、開発者が Android、iOS、および Web アプリケーションにリアルタイム メッセージを送信するのに役立ちます。このチュートリアルでは、FCM を使用して、PHP アプリケーションを通じてスケジュールされたメッセージ プッシュ機能を実装します。ステップ 1: Firebase プロジェクトを作成する まず、F で

PHP とそのアプリケーションの一般的なプログラミング PHP とそのアプリケーションの一般的なプログラミング Jun 22, 2023 pm 08:07 PM

1. ジェネリック プログラミングとは何ですか? ジェネリック プログラミングとは、プログラミング言語で共通のデータ型を実装し、このデータ型をさまざまなデータ型に適用できるようにすることで、コードの再利用と効率化を実現することを指します。 PHP は動的型付け言語ですが、C++、Java、その他の言語のような強力な型メカニズムがないため、PHP で汎用プログラミングを実装するのは簡単ではありません。 2. PHP でのジェネリック プログラミング PHP でジェネリック プログラミングを実装するには、インターフェイスを使用する方法とトレイトを使用する方法の 2 つがあります。インターフェイスを使用して PHP でインターフェイスを作成する

PHP アプリケーションでの Redis 正規表現操作 PHP アプリケーションでの Redis 正規表現操作 May 16, 2023 pm 05:31 PM

Redis は、文字列、ハッシュ テーブル、リスト、セット、順序付きセットなどを含むさまざまなデータ構造をサポートする高性能のキー/値ストレージ システムです。同時に、Redis は文字列データに対する正規表現の一致および置換操作もサポートしているため、PHP アプリケーションの開発において柔軟性が高く便利です。 PHP アプリケーションで正規表現操作に Redis を使用するには、まず phpredis 拡張機能をインストールする必要があります。この拡張機能は、Redis サーバーと通信する方法を提供します。

PHP における署名認証方式とその応用 PHP における署名認証方式とその応用 Aug 06, 2023 pm 07:05 PM

PHP における署名認証方法とその応用 インターネットの発展に伴い、Web アプリケーションのセキュリティがますます重要になってきています。署名認証は、リクエストの正当性を検証し、不正アクセスを防止するために使用される一般的なセキュリティ メカニズムです。この記事では、PHP での署名認証方法とその応用を紹介し、コード例を示します。 1. 署名認証とは何ですか?署名認証は、キーとアルゴリズムに基づく検証メカニズムです。リクエスト パラメータは暗号化されて一意の署名値が生成されます。その後、サーバーはリクエストを復号化し、同じアルゴリズムとキーを使用して署名を検証します。

チュートリアル: Baidu Push 拡張機能を使用して、PHP アプリケーションにメッセージ プッシュ機能を実装する チュートリアル: Baidu Push 拡張機能を使用して、PHP アプリケーションにメッセージ プッシュ機能を実装する Jul 26, 2023 am 09:25 AM

チュートリアル: Baidu Cloud Push (BaiduPush) 拡張機能を使用して、PHP アプリケーションにメッセージ プッシュ機能を実装する はじめに: モバイル アプリケーションの急速な開発に伴い、アプリケーションにおけるメッセージ プッシュ機能の重要性がますます高まっています。インスタント通知およびメッセージ プッシュ機能を実現するために、Baidu は強力なクラウド プッシュ サービス、すなわち Baidu Cloud Push (BaiduPush) を提供しています。このチュートリアルでは、Baidu Cloud Push Extension (PHPSDK) を使用して、PHP アプリケーションにメッセージ プッシュ機能を実装する方法を学習します。百度クラウドを使用します

PHP アプリケーションの Redis 操作ログ PHP アプリケーションの Redis 操作ログ May 15, 2023 pm 08:10 PM

PHP アプリケーションの Redis 操作ログ PHP アプリケーションでは、データのキャッシュまたは保存のためのソリューションとして Redis を使用することがますます一般的になってきています。 Redis は、高速でスケーラブルで可用性が高く、多様なデータ構造を備えた高性能のキー/値ストレージ データベースです。 Redis を使用する場合、アプリケーションの動作をより深く理解し、データのセキュリティを確保するために、Redis の動作ログが必要です。 Redis操作ログはRedisサーバー上のすべてのクライアントを記録できます

PHP アプリケーションでの Redis 全文検索 PHP アプリケーションでの Redis 全文検索 May 19, 2023 am 08:01 AM

インターネット技術の継続的な発展に伴い、検索エンジンの応用はますます普及しています。インターネットの文脈では、検索エンジンはユーザーが情報を入手する主な方法の 1 つになっています。このプロセスでは、全文検索技術が重要な役割を果たします。全文検索では、テキスト コンテンツにインデックスを付けて、ユーザーがクエリを実行したときに一致するテキストをすばやく見つけます。 PHP アプリケーションで全文検索を実装するためのソリューションは数多くありますが、この記事では PHP アプリケーションでの Redis の全文検索に焦点を当てます。 Redis は高性能の非リレーショナル メモリです

See all articles