エンタープライズレベルのアプリケーション、主に PHP5 での Web サービスの実装に関するもの (以下のプログラムは JAVA、NET、C などで通常に呼び出すことができます) 中国では PHP を使用して Web サービスを作成する人は非常に少なく、会社のプロジェクト開発プロセス中にオンラインで多くの情報がありませんでした。そのため、皆さんの参考のために書き留めておきました。 🎜>
クライアント
コード:
01.
02.header ( "Content-Type: text/html; charset=utf-8" );
03./*
04.* WebServiceのパスを指定し、WebServiceクライアントを初期化します
05.*/
06.$ws = "
http://soap/soapCspMessage.php?wsdl
";
07.$client = new SoapClient ( $ws, array ('trace' => 1, 'uri' => 'http://www.zxsv.com/SoapDiscovery/' ) );
08./*
09.* SoapClient オブジェクトによって参照されるサービスによって提供されるすべてのメソッドを取得します
10.*/
11.echo ("SOAP サーバーが提供する関数を開きます:");
12.echo ('
'); 13.var_dump ( $client->__getFunctions () ); 14.echo (''); 15.echo ("SOAP サーバーによって提供されるタイプ:"); 16.echo ('
'); 17.var_dump ( $client->__getTypes () ); 18.echo (''); 19.echo ("GetGUIDNode の実行結果:"); 20.//$users = $client->GetUsers(); 21.//var_dump($HelloWorld)
21.$s[] =&new Member(array($i, $uid->{'uname'}.'I test'.$i)); 22.}
23.return array('GetMemberResult'=>$s); 24.}25.}
26.?>
ここですべてを理解する必要があります
以下は WSDL ファイルです
コード:
001.
002.
003.
004.
005.
006.
007.
008.
009.
010.
011.
012.
013.
014.
015.
016.
017.
018.
019.
020.
021.
022.
023.
024.
025.
026.
027.
028.
029.
030.
031.
032.
033.
034.
035.
036.
037.
038.
039.
040.
041.
042.
043.
044.
045.
046.
047.
048.
049.
050.
051.
052.
053.
054.
055.
056.
057.
058.
059.
060.
061.
062.
063.
064.
065.
066.
067.
068.
069.
070.
071.
072.
073.
074.
075.
076.
077.
078.
079.
080.
081.
082.
083.
084.
085.
086.
087.
088.
089.
090.
091.
092.
093.
094.
095.
096.
097.
098.
099.
100.
101.
102.
103.
104.
ここには返される 2 つの文字列があり、1 つは返される文字列です、これはよく理解されています
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
この段落は文字列です
配列を返すのはさらに面倒です。WSDL ファイルが間違って書かれていることがわかるまで、私と農場主は 1 ~ 2 週間取り組みました。
01.
02.
08.
09.
16.
最初の段落 GetMember は入力です。最も重要なのは、type="tns:ArrayOfMember" です。ここでは、ArrayOf が WSDL で定義されています。 ArrayOfMember の type =”tns:Member” で、name="Member" から返される配列を取得して完了です。
Ping Service は、Ping Service サービスを提供する Web サイトにブログの更新情報をできるだけ早く公開するための通知メカニズムを提供するブログ プログラムです。
を作成するときにそれについて勉強しました。
まずは基準を見てみましょう
これは、XMLRPC を使用してデータを送信する標準の Ping サービスです。コメントは非常に詳細なので、PHP5 で XMLRPC メソッドを有効にする必要はありません
。
client.php
コード:
01.
02.$host = 'zxsv'
03.$ポート = 80;
04.$rpc_server = '/test/xmlrpc_server.php';
05.$title = 'zxsv'
06.$server = 'http://zxsv/test/';
07.$rss = 'http://zxsv/test/rss.php'
08.//weblogUpdates.Ping メソッド
09.$Ping = xmlrpc_encode_request('weblogUpdates.Ping', array($title, $server ));
10.//weblogUpdates.extendedPing メソッド
11.$extendedPing = xmlrpc_encode_request('weblogUpdates.extendedPing', array($title, $server, $rss ));
12.// rpc_client_call 関数を呼び出して、すべてのリクエストを XML-RPC サーバーに送信し、情報を取得します
13.$response = rpc_client_call($host, $port, $rpc_server, $Ping);
14.$split = '';
15.$xml =explode($split, $response);
16.$xml = $split .array_pop($xml);
17.$response = xmlrpc_decode($xml);
18.//RPCサーバーから取得した情報を出力
19.print_r($response);
20./**
21.* 機能: XML-RPC サーバーに接続するためにクライアントに提供される機能
22.* パラメータ:
24.* $port ホストに接続するポート
25.* $rpc_server XML-RPC サーバー側ファイル
26.* $request カプセル化された XML リクエスト情報
27.* 戻り値: 接続が成功した場合、サーバーから返された XML 情報は正常に返され、失敗した場合は false
が返されます。
28.*/
29.function rpc_client_call($host, $port, $rpc_server, $request) {
$fp = fsockopen($host, $port);
31.
$query = "POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC ClientnHost: ".$host."nContent-Type: text/xmlnContent-Length: ".strlen($request)."nn".$request."n ";
32.
if (!fputs($fp, $query, strlen($query))) {
33.
$errstr = "書き込みエラー"
;
34.
false を返します
35.
}
36.
$contents = '';
37.
while (!feof($fp)){
38.
$contents .= fgets($fp);
39.
}
40.
fclose($fp);
41.
$content を返します
42.}
43.?>
server.php
コード:
01.
02./**
03.* 機能:RPCクライアントに提供される機能
04.* パラメータ:
05.* $method はクライアントが呼び出す必要がある関数です
06.* $params は、クライアントが呼び出す必要がある関数のパラメータ配列です
07.* Return: 指定された呼び出し結果を返します
08.*/
09.function rpc_server_extendedping($method, $params) {
10.
$title = $params[0]
;
11.
$server = $params[1]
12.
$rss = $params[2]
13.
//中間判定、正常に $XML_RPC_String を返します
14.
$XML_RPC_String = array('flerror'=>false,'message'=>'ping ありがとうございます。');
15.
$XML_RPC_String を返します
16.}
17.function rpc_server_ping($method, $params) {
18.
$title = $params[0]
19.
$server = $params[1]
20.
//中間判定、正常に $XML_RPC_String を返します
21.
$XML_RPC_String = array('flerror'=>false,'message'=>'ping ありがとうございます。');
22.
$XML_RPC_String を返します
23.}
24.//XML-RPC サーバー側を生成します
25.$xmlrpc_server = xmlrpc_server_create();
26.//サーバーによって呼び出されるメソッド rpc_server を登録します。これは実際には rpc_server_extendedping 関数を指します
27.xmlrpc_server_register_method($xmlrpc_server, "weblogUpdates.extendedPing", "rpc_server_extendedping");
28.xmlrpc_server_register_method($xmlrpc_server, "weblogUpdates.Ping", "rpc_server_ping");
29.//クライアントからの XML データ POST を受け取ります
30.$リクエスト = $HTTP_RAW_POST_DATA
31.//print_r($request)
32.//クライアントを呼び出してXMLリクエストを実行し、実行結果を取得します
33.$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
34.//関数処理後の結果XMLを出力
35.header('Content-Type: text/xml');
36.echo $xmlrpc_response;
37.//XML-RPC サーバー側リソースを破棄します
38.xmlrpc_server_destroy($xmlrpc_server);
39.?>
同様の方法で書かれていますが、バグがあります
コード:
01.
02.class Pings {
03.
パブリック $xmlrpc_server
04.
パブリック $xmlrpc_response;
05.
パブリック $メソッド名;
06.
パブリック関数 __construct() {
07.
//XML-RPC サーバー側を生成
08.
$this->xmlrpc_server = xmlrpc_server_create();
09.
$this->run ();
10.
}
11.
12.
//サーバーによって呼び出されるメソッド rpc_server を登録します。これは実際には ping 関数を指します
13.
パブリック関数 rpc_server() {
14.
$this->メソッド名 = !$this->メソッド名 ? 'weblogUpdates.extendedPing':'weblogUpdates.Ping';
15.
xmlrpc_server_register_method ( $this->xmlrpc_server, $this->methodName, array (__CLASS__, "ping"));
16.
}
17.
/**
18.
* 関数: RPC クライアントから呼び出されるために提供される関数
19.
* パラメータ:
20.
* $method はクライアントが呼び出す必要がある関数です
21.
* $params は、クライアントが呼び出す必要がある関数のパラメータ配列です
22.
* Return: 指定された呼び出し結果を返します
23.
*/
24.
パブリック関数 ping($method, $params) {
25.
$this->title = $params [0]
26.
$this->server = $params [1]
27.
$this->rss = $params [2]
28.
$this->tag = $params [3]
29.
//$a = $this->title ? $this->update():'';
30.
$string = array ('flerror' => false, 'message' => 'ping ありがとうございます。', 'legal' => "blueidea.com ping サービスの使用には規約が適用されることに同意するものとします。使用方法は
www.blueidea.com
で見つかります。" );
31.
$string を返します。
32.
}
33.
34.
パブリック関数 update(){
35.
echo 'ここに更新された条件を入力します'
36.
}
37.
38.
パブリック関数 run() {
39.
$this->rpc_server();
40.
$request = isset ( $GLOBALS ["HTTP_RAW_POST_DATA"] ) ? file_get_contents ( "php://input" ) : $GLOBALS ["HTTP_RAW_POST_DATA"];
41.
$this->xmlrpc_response = xmlrpc_server_call_method ( $this->xmlrpc_server, $request, null );
42.
//関数処理後の結果XMLを出力
43.
ヘッダー ( 'Content-Type: text/xml' );
44.
echo $this->xmlrpc_response;
45.
}
46.
47.
//XML-RPC サーバー側リソースを破棄します
48.
パブリック関数 __destruct() {
49.
xmlrpc_server_destroy ( $this->xmlrpc_server );
50.
}
51.}
52.$Obj = 新しい Ping ( );
53.?>
WebService で最もよく使用される 2 つのメソッドを書き留めました