PHP SOAP サーバー
PHP と NuSoap を使用して SOAP サーバーをセットアップするのは非常に簡単です。基本的には、Web サービスに公開したい関数を記述し、NuSoap に登録するだけです。 PHP SOAP サーバーの確立を完了するには、あと 2 つの手順が必要です。まず、PHP コードで NuSoap オブジェクトのインスタンスを作成し、HTTP POST メソッドを使用して元のデータを処理のために NuSoap に渡す必要があります。NuSOAP の使用は比較的簡単で、最もよく使用されるクラスはsoap_serverです。この 2 つのクラスの定義は lib/nusoap.php にあるので、作成時にこれを参照する必要があります。 Web サービス インターフェイス プログラムの呼び出し File.
NuSoap は、WebService の作成または呼び出しに使用される、PHP 環境の WebService プログラミング ツールです。これは、HTTP を介して SOAP メッセージを送受信する、完全に PHP 言語で記述された一連の PHP クラスであるオープン ソース ソフトウェアであり、NuSphere Corporation (http://dietrich.ganx4.com/nusoap/) によって開発されています。 NuSOAP の利点の 1 つは、拡張ライブラリのサポートを必要とせず、この機能により NuSoap をすべての PHP 環境で使用できるようになり、サーバーのセキュリティ設定の影響を受けないことです。
1.
まず、
http://sourceforge.net/projects/nusoap/にアクセスし、nusoap.zipをダウンロードします。 2.サーバー: nusoapService.phpファイルを作成します。
[php]
プレーンコピーを見る
-
- require_once ("lib/nusoap.php"); =
新しい- soap_server () ; //文字化けを避ける
- $server->soap_defencoding = 'UTF-8';
- $サーバー- > ;decode_utf8 = false;
$server- ->xml_encoding = 'UTF-8';
// wsdl サポートを開く- /*
-
クライアントからアクセスする必要があるプログラムを登録します 対応する値を入力します: bool->" xsd:boolean" string- >"xsd:string" int->"xsd:int" float->"xsd:float"
- */
-
$サーバー- ->register ('GetTestStr'
, - //メソッド名
-
array (
"name"-
=> 「xsd:文字列」 ), // パラメーター、デフォルトは "xsd:string" array
- ("return" => "xsd:string ") )) ; //戻り値、デフォルトは「xsd:string」です //isset 変数が設定されているかどうかを確認します
- $HTTP_RA W_POST_DATA = isset ( $HTTP_RAW_POST_DATA ) ? $HTTP_RAW_POST_DATA : ''
- ;
- $サーバー- > ;サービス ($HTTP_RAW_POST_DATA); /**
- * 呼び出し方法 * @param $name
- */
- functionGetTestStr( $name)
- ) {
復活- 「こんにちは、
- }
- 」 3.クライアント: nusoapClient.php ファイル。
-
[php]
プレーンコピーを見る
-
- require_once ("lib/nusoap.php");
- WSDL経由でWebServiceを呼び出す
- パラメータ 1 WSDL ファイルのアドレス (疑問符の後の wsdl は大文字にすることはできません)
- パラメータ 2 WSDL を使用するかどうかを指定します
- $client = newsoapclient(' http ://localhost /nusoapService.php?wsdl',true);
- */
- $client =
new- soapclient () 'http:/ /localhost/nusoapService.php' ); ->decode_utf8 = false; $パラ = 配列 (
- '名前' => 'ブルース・リー'); ->電話( 'GetTestStr'
- , $paras);
- //エラーをチェックして戻り値を取得します if
- (! $エラー = $client
- ->getError ()) { echo" 返される結果: " , $result;
} - その他 {
- echo" 通話エラー: "、$err ; ?>
-
[ php]
プレーンコピーを見る
- require_once ("lib/nusoap.php");
- WSDL経由でWebServiceを呼び出す
- パラメータ 1 WSDL ファイルのアドレス (疑問符の後の wsdl は大文字にすることはできません)
- パラメータ 2 WSDL を使用するかどうかを指定します
- $client = new soap client(' http://localhost /nusoapService.php?wsdl',true);
- */
- $client =
new- soapclient ( ) 'http:/ /localhost/nusoapService.php?wsdl',true); $client->decode_utf8 = false; $パラ = array (
'name' => 以下のパラメータを省略します $client->call ('GetTestStr', $パラ ); $ドキュメント = $クライアント- >ドキュメントエコー
$ドキュメント; ; 注: 戻り値:こんにちは、{ ブルース
リー } !
WSDLWSDL は、Web サービスを記述するために使用される XML 言語です。これは、サービスにアクセスするために必要なすべての情報を Web サービス クライアントに提供する機械可読形式です。 NuSOAP は、特に WDSL ファイルを解析し、そこから情報を抽出するクラスを提供します。 soapclient オブジェクトは、開発者がサービスを呼び出すのを容易にするために wsdl クラスを使用します。 WSDL 情報を利用してメッセージを作成することにより、プログラマは、それを呼び出す操作の名前とパラメータを知るだけで済みます。 NuSOAP 経由で WSDL を使用すると、次の利点があります: 名前空間、エンドポイント URL、パラメータ名などのすべてのサービス メタファイルを WSDL ファイルから直接取得できるため、クライアントのダイナミクスをサーバー側の変更に適応させることができます。このデータはサーバーから常に利用できるため、このデータをユーザー スクリプトにハードコーディングする必要はなくなりました。 これにより、soap_proxy クラスを使用できるようになります。このクラスは、soapclient クラスから派生し、WDSL ファイルで詳細に説明されている操作に対応するメソッドを追加します。ユーザーはそれを通じてこれらのメソッドを直接呼び出すことができるようになりました。 soapclient クラスには、soap_proxy クラスのオブジェクトを返す getProxy() メソッド が含まれています。 soap_proxy クラスは、soapclient クラスから派生し、WSDL ドキュメントで定義された操作に対応するメソッドを追加し、ユーザーがエンドポイントのリモート メソッドを呼び出せるようにします。これは、soapclient オブジェクトが WDSL ファイルで初期化されている場合にのみ適用されます。長所はユーザーにとっての使いやすさですが、短所はパフォーマンスです。PHP でのオブジェクトの作成には時間がかかり、実用的な目的には役立ちません (そしてこの機能は
功利的な目的はありません)。
[php]
プレーンコピーを見る
- require_once ("lib/nusoap.php"); =
新しい- ソープクライアント ( 'http://localhost/nusoapService.php?wsdl',true); $client->decode_utf8 = false; //プロキシクラスを生成
$proxy = $client
->getProxy(); //リモート関数を呼び出す
$ sq = $proxy->GetTestStr(
'ブルース・リー') ->getError()) {
print_r($sq); } else
{ : $err"
; }
print 'REQUEST:' .$p-> ;request.
'</xmp>'
; 'RESPONSE: < ).''?> lfile
メソッド名をクリックします。このように、サービスに数行のコードを追加することで、NuSOAP を使用してサービスのビジュアル ドキュメントを提供します。しかし、私たちにできることはそれだけではありません。 NuSOAP を使用して、サービスにいくつかの WSDL 呼び出しを追加します。サービス用の WSDL とその他のドキュメントを生成できます。対照的に、少なくともこの単純な例では、クライアントでできることはあまりありません。以下に示すクライアントは、WSDL を使用しないクライアントと変わりません。唯一の違いは、soapclent クラスの解析が、以前のようにサービス エンドポイントの代わりに WSDL の URL を提供することによって行われることです。 NuSoap が WebService を呼び出すときにコードが文字化けする問題の解決策: [php]
plaincopy を表示$client->soap_defencoding = 'utf-8' = false; ;xml_encoding = 'utf -8'
; それ以外の場合、呼び出し時に次のようなエラーが報告されます:
XML エラーがオンラインで SOAP ペイロードを解析していますWebService を実装し、 SOAP を有効にしないでくださいphpの拡張子、 その理由は、nusoapのSoapClientクラスがphp5の組み込みSOAPクラスと競合するためです。 解決策1. php5 の組み込み SOAP 拡張機能 (Windows では php_soap.dll) をロードしないように php.ini を変更します。 2. nusoap の SoapClient クラスの名前を変更した人もいます。
本人認証
[php]
プレーンコピーを見る
- header('content-type: text/xml; charset=UTF-8');
- require_once('nusoap.php');
- $params = array('AuthenticationHeader' => array(
- 'コンテンツタイプ' => 'text/xml; charset=UTF-8',
- 'SOAPAction' => 'YourFunstion',
- )
- );
- $client = new nusoap_client('http://www.yourdomain.com/service.asmx?wsdl', true, '', ”, ”, ”);
- $client->setHeaders('
-
"http://tempuri.org/webservice">
ユーザー名 password
'); $err = $client->getError(); if
($err) { echo
'コンストラクターエラー& lt;/h2>'
。 $エラー 。 ''; }
$result
= $client->call('YourFunction', $params 、 」、 ''、false、true); if
($client->fault) { echo
''</span><span> ; </span><span></span><span></span> print_r(</span>$result</li>
<li>); <span><span></span><span></span> </span>echo</li>
<li> <span><span>'
'
; } else
{ $err
= $client->getError(); if
($err) { echo
''</span><span> 。 </span><span>$エラー</span><span> 。 </span><span>'
'
; } else
{ echo
'結果
<span>; </span><span></span><span></span></span>//print_r($result);</li>
<li> <span><span></span><span></span> </span>echo</li>
<li> <span><span>'
'; }
}
echo'Request
'
.htmlspecialchars($client->request, ENT_QUOT ES) 。 '< / gt; '-&gt;
上記では、webservice-nusoap の側面を含めた詳細な説明を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。