ホームページ  >  記事  >  バックエンド開発  >  PHP の SOAP 原則と実装の詳細な説明

PHP の SOAP 原則と実装の詳細な説明

WBOY
WBOYオリジナル
2016-06-20 13:00:571457ブラウズ

SOAP の原則と PHP の実装

1. はじめに:

SOAP: (正式名 Simple Object Access Protocol) は、データ交換のためのプロトコル仕様であり、HTTP の上に位置し、データ交換に XML 形式の言語を使用します。 使用シナリオ: 異なるプロジェクトが開発に使用される場合。データを交換するには、相互に通信できるツールが必要です。WSDL と SOAP は、このために生まれました。

WSDL: WSDL は、Web サービス記述言語を指し、XML で記述されたドキュメントです。このドキュメントでは Web サービスについて説明します。サービスの場所と、このサービスによって提供される操作 (またはメソッド) を指定します。

2. 構成:

PHP の SOAP 拡張機能の有効化と構成

WIN環境

PHP.ini extension=php_soap.dll を開き、先頭のセミコロンを削除します

Linux 環境

コンパイル時に --enable-soap

を追加します

WSDL キャッシュ タイプ 1 はディスク 2 はメモリです

soap.wsdl_cache = 1

キャッシュファイルの保存場所

soap.wsdl_cache_dir = /tmp

WSDL キャッシュ機能を有効または無効にします。SOAP を実行するたびに、相手の XML ドキュメントをダウンロードする処理が発生し、これも非効率の原因です。

soap.wsdl_cache_enabled =1

キャッシュされたファイルの最大数

soap.wsdl_cache_limit

キャッシュファイルの生存時間

soap.wsdl_cache_ttl = 3600

3. 応用例:

a. wsdl を使用しない場合

サーバー:

<span style="font-size:18px;"><?php
class testclass{
	
	public function getName($name)
	{
		return "hello ".$name;
	}
}


function getName($name)
{
	return "hello ".$name;
}

$a = new SoapServer(null,array("uri"=>"index.php"));
$a->setClass("testclass");  //指定一个类中的所有方法
//$a->addFunction("test");  //指定单个方法
$a->handle();   //处理访问</span>

uri は必須フィールドです。クライアントの URI はサーバーの URI と一致している必要があります

クライアント

<span style="font-size:18px;">try{
	$client = new SoapClient(null, array("location"=>"http://localhost/instance/index.php","uri"=>"index.php"));
	//echo $client->getName("getName");          //调用方法
	echo $client->__soapCall ("getName",array("name"));    //调用方法
	
}catch(Exception $e){
	print_r($e->getMessage(),true);
}</span>

location は SOAP サーバーのアクセス アドレスであり、URI はサーバーと一致しています

b. WSDL メソッド

を使用します。

wsdl を使用する前に XML ファイルを手動で生成する必要がありますが、これを手動で記述するのは面倒すぎるため、SoapDiscovery.class.php のオープン ソース クラス生成を使用できます

ダウンロードアドレス

<span style="font-size:18px;"><?php
class testclass{

	public function getName($name)
	{
		return "hello ".$name;
	}
}

include_once "SoapDiscovery.class.php";

$discovery = new SoapDiscovery("testclass","testclass");
$filename = $discovery->getWSDL(); //生成XML文件
echo $filename;</span>

サーバー

<span style="font-size:18px;">$a = new SoapServer("testclass.wsdl");
$a->setClass("testclass");  //指定一个类中的所有方法
$a->handle();   //处理访问 </span>

クライアント

<span style="font-size:18px;">try{
	$client = new SoapClient("http://localhost/instance/index.php?wsdl");
	//echo <span style="font-family:Arial,Helvetica,sans-serif">$client</span>->getName("getName");
	//echo <span style="font-family:Arial,Helvetica,sans-serif">$client</span><span style="font-family:Arial,Helvetica,sans-serif">->__soapCall ("getName",array("name"));</span>
	print_r(<span style="font-family:Arial,Helvetica,sans-serif">$client</span><span style="font-family:Arial,Helvetica,sans-serif">->__getFunctions()); //打印服务端所有提供的方法</span></span>
<span style="font-size:18px;">}catch(Exception $e){
	print_r($e->getMessage(),true);
}</span>

拡張クラスが提供するメソッドについては、PHP マニュアルを参照してください


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