この記事では、SOAP 拡張機能を使用して WebService を実装する PHP の例について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
最近、PHP プロジェクトでの外部インターフェイスの接続には WebService が関係しています。検索エンジンに関する関連記事はほとんどありません。そのほとんどは、いわゆる強力なオープン ソース ソフトウェアである NuSOAP (ダウンロード アドレス: http://sourceforge. net/projects/nusoap /)、つまり一部のクラスです。記事で説明している環境はPHP 4.3です。現在はPHP 5.2またはPHP 5.3が一般的です。最初に試してみたのですが、実行が間違っていました。NuSOAP が提供する Soapclient クラスが、PHP 5 の新しい組み込み SOAP 拡張機能を持つ SoapClient クラスと競合することがわかりました。
NuSOAP はすべての PHP 環境で使用できると主張していますが、サーバーのセキュリティ設定の影響を受けません。ただし、多くのクラスファイルを参照する必要があるため、実用的であれば、PHP 5 で追加された組み込みの SOAP 拡張機能を使用する方が良いと考えています。まずは SOAP について学びましょう:
1. SOAP と XML-PRC の比較
Web サービスの初期の頃、XML 形式のメッセージが最初に主に使用されたのは XML-RPC プロトコルでした。RPC は Remote Procedure Call の略です。 XML リモート プロシージャ コール (XML-RPC) では、クライアントは、名前、サービスを実行しているプログラム、および入力パラメータを含む特定のメッセージを送信します。XML-RPC は、限られた種類のデータ型といくつかの単純なデータ構造のみを使用できます。このプロトコルは十分強力ではないと考えられたため、SOAP が登場しました。SOAP の元々の定義はシンプル オブジェクト アクセス プロトコルでした。その後、SOAP は単純なものではなく、オブジェクト指向言語を使用する必要がないことに徐々に誰もが気づき、現在では SOAP という名前だけが使われるようになりました。
XML-RPC には単純なデータ型セットしかありません。代わりに、SOAP は XML スキーマの継続的な進化を活用してデータ型を定義します。同時に、SOAP は XML 名前空間も利用できますが、XML-RPC では必要ありません。これにより、SOAP メッセージの先頭を任意のタイプの XML 名前空間宣言にすることができますが、その代償として、より複雑になり、システム間の非互換性が生じます。
コンピューター業界の覚醒により、人々は XML ベースの Web サービスのビジネスの可能性を発見し、企業はアイデア、意見、議論、標準化の試みを継続的に模索し始めました。かつて W3C は「Web サービス活動」という名称で成果展示会を開催することができましたが、その中には実際に SOAP を作成した XML プロトコル ワーキング グループ (XML Protocol Working Group) も含まれていました。何らかの形で SOAP に関連している、または SOAP に依存している Web サービスに関連する標準化の取り組みの数は、驚くべき程度に 2 倍に増加しています。
元々、SOAP は XML-RPC の拡張として開発されました。その主な重点は、WSDL ファイルから取得したメソッド名と変数名を使用してリモート プロシージャ呼び出しを行うことです。現在、継続的な進歩により、人々は単なる「ファイル」メソッド (基本的には SOAP エンベロープを使用して XML 形式のファイルを送信する) 以外の SOAP の使用方法を発見しました。いずれにせよ、SOAP をマスターするには、WSDL が果たす役割を理解することが基本です。
2. SOAPパケット構造の分析
SOAP メッセージは、SOAP ヘッダーと SOAP ボディを含めて SOAP エンベロープと呼ばれます。このうち、SOAPヘッダーはセキュリティ(証明書を利用してWebサービスにアクセスする)など、Webサービスの機能を拡張するためのさまざまなメッセージを簡単に挿入することができ、SOAPボディはMarshall以降の情報である特定のメッセージテキストです。SOAP を呼び出すとき、つまり HTTP Post メッセージを URL (http://api.google.com/search/beta2 など) に送信するとき (SOAP 仕様に従って、HTTP Get メッセージもサポートされます)、呼び出しメソッド 名前は、HTTP リクエスト ヘッダーの SOAP アクションと、その後に続く SOAP エンベロープで指定されます。サーバーはリクエストを受信し、計算を実行し、返された結果を XML にマーシャリングし、HTTP を使用してクライアントに返します。
3. SOAP の簡単な例
SOAP 開発には通常 3 つのオプションがあります:1)、PEAR 独自の SOAP 拡張機能
2)、PHP 独自の SOAP 拡張機能;
3)、NuSOAP (純粋な PHP)。
.NET WEB サービスにアクセスするクライアントの例:
リーリー
4. 例
1) PHPを使用してSOAPサービスを作成しますsoap_server.phpを作成します(仮想パス: http://localhost/php/soap/soap_server.php)
リーリー
注:a)、数学クラスは近々公開される Web サービスです
;
b) $server->addClass ではなく、$server->setClass。
2) PHP クライアントを使用して、新しく作成した SOAP サービスにアクセスします
リーリー
可以用ZendStudio生成静态的WSDL文件,此时用到math类的phpdoc作为生成WSDL的元数据。用ZendStudio生成wsdl文件时,必须正确说明Web服务目标地址,片断如下:
... <service name="mathService"> <port binding="typens:mathBinding" name="mathPort"> <soap:address location="http://localhost/php/soap/soap_server.php"></soap:address> </port> </service> ...
注:调用PHP Webserver的方法必须传入命名参数。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。