Soap は XML および HTTP 通信プロトコルに基づいており、php で SOAP を使用するには、php の SOAP モジュール、つまり php.ini に「soap.so」を追加します。
この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター
1. php とは石鹸って意味? wsdl とは何ですか? なぜそれを使用する必要があるのですか?
SOAP は XML および HTTP 通信プロトコルに基づいており、さまざまな XML プラットフォームおよび言語でサポートされています。 http は、すべてのインターネット ブラウザとサーバーでサポートされています。
WSDL は Web サービス記述言語 (Web Services description Language) を指し、XML で記述された文書です。このドキュメントでは Web サービスについて説明します。サービスの場所と、このサービスによって提供される操作を指定します。
私は PHP で作業し、あなたは Java で作業し、彼は .NET で作業しています。私たち 3 人が通信してデータを交換したい場合はどうすればよいでしょうか?私たち全員とコミュニケーションできるツールが必要です。 soap、wsdl は、異なるオペレーティング システム上で実行され、異なるテクノロジとプログラミング言語を使用するアプリケーションが相互に通信できるように作成されました。
2. 例
PHP が SOAP を使用したい場合、通常の方法は、PHP の SOAP モジュールを追加し、 php.ini にsoap.so を追加することです (ここ)はsoap.soファイルを追加せずにsoap
//包函nusoap.php require_once('./lib/nusoap.php'); //创建服务端 $server=newsoap_server; //定义客户端调用方法 $server->register('hello'); //调用方法以及参数 functionhello($name) { return'Hello, '.$name; } $HTTP_RAW_POST_DATA= isset($HTTP_RAW_POST_DATA) ?$HTTP_RAW_POST_DATA:''; $server->service($HTTP_RAW_POST_DATA); ?>
pを実装する方法です。so file
nusoapはPHPで書かれた機能ファイルで、これを含めると利用できます。それらはオンラインにたくさんあるので、自分で検索してください。
1. wsdl
a. サーバー helloworld2.php
b. クライアント hello.php
//包函nusoap.php require_once('./lib/nusoap.php'); //新建一个soap客户端,调用服务端提供的wsdl //$client = new soapclient('http://localhost/test/hellowsdl2.php?wsdl', true); $client=newsoapclient('http://localhost/test/helloworld2.php'); //查看一下是不是报错 $err=$client->getError(); if($err) { //显示错误 echo' Constructor error '.$err.' '; } //调用服务端的方法 $result=$client->call('hello',array('person'=>"this is a test")); echo' Result '; print_r($result); echo' '; ?>
2. wsld を使用します
a、サーバー側
//包函nusoap.php require_once('./lib/nusoap.php'); //新建一个soap服务 $server=newsoap_server(); //初始化支持wsdl $server->configureWSDL('hellowsdl2','urn:hellowsdl2'); //定义数据结构来接收数据 $server->wsdl->addComplexType( 'Person', 'complexType', 'struct', 'all', '', array( 'firstname'=>array('name'=>'firstname','type'=>'xsd:string'),//后面的type定义数据的类型,这个是string 'age'=>array('name'=>'age','type'=>'xsd:int'),//后面的type定义数据的类型,这个是int 'gender'=>array('name'=>'gender','type'=>'xsd:string')//后面的type定义数据的类型,这个是string ) ); $server->wsdl->addComplexType( 'SweepstakesGreeting', 'complexType', 'struct', 'all', '', array( 'greeting'=>array('name'=>'greeting','type'=>'xsd:string'), 'winner'=>array('name'=>'winner','type'=>'xsd:string') ) ); //服务器定义的soap调用方法 $server->register('hello',// 方法名字hello,方法就在下面 array('person'=>'tns:Person'),// 客户端传来的变量 array('return'=>'tns:SweepstakesGreeting'),//返回参数 'urn:hellowsdl2',// soap名 'urn:hellowsdl2#hello',// soap的方法名 'rpc',// 使用的方式 'encoded',// 编码 'test'// 存档 ); //定义上面注册过的函数hello functionhello($person) { $greeting='Hello, '.$person['firstname'].'. It is nice to meet a '.$person['age'].' year old '.$person['gender'].'.'; $winner='Scott'; //要返回的数据 returnarray( 'greeting'=>$greeting, 'winner'=>$winner ); } // 请求时(试图)调用服务 $HTTP_RAW_POST_DATA= isset($HTTP_RAW_POST_DATA) ?$HTTP_RAW_POST_DATA:''; $server->service($HTTP_RAW_POST_DATA); ?>
b、クライアント側
//包函nusoap.php require_once('./lib/nusoap.php'); //新建一个soap客户端,调用服务端提供的wsdl //$client = new soapclient('http://localhost/test/hellowsdl2.php?wsdl', true); $client = new soapclient('http://localhost/test/helloworld2.php'); //查看一下是不是报错 $err = $client->getError(); if ($err) { //显示错误 echo ' Constructor error ' . $err . ' '; } //要向服务端要传的参数 $person = array('firstname' => 'Willi', 'age' => 22, 'gender' => 'male'); //调用服务端的方法 $result = $client->call('hello', array('person' => $person)); //错误审核 if ($client->fault) { echo ' Fault '; print_r($result); echo ' '; } else { $err = $client->getError(); if ($err) { echo ' Error ' . $err . ' '; } else { echo ' Result '; print_r($result); echo ' '; } } //显示请求信息 echo ' Request '; echo ' ' . htmlspecialchars($client->request, ENT_QUOTES) . ' '; //显示返回信息 echo ' Response '; echo ' ' . htmlspecialchars($client->response, ENT_QUOTES) . ' '; //显示调试信息 echo ' Debug '; echo ' ' . htmlspecialchars($client->debug_str, ENT_QUOTES) . ' '; ?>
上記の 2 つの例は、クライアントでもサーバーでも、PHP で書かれています。複数の言語で記述してみることもできます。それをテストするために。 PHP モジュールを使用しているか nusoap を使用しているかに関係なく、ここでは特定のメソッドについて詳しく説明しません。それらはすべてマニュアルに記載されています。
SOAP についてはここで紹介する必要はありません。ここでは SOAP の実装の簡単な例を示します。特に言うことはありません。コードを見てみましょう。 Soap はサーバーとクライアントに分かれています。クライアントにサーバーのコードを呼び出させる必要があります。まず、サーバーの短いコードを見てください:
これはサーバー側のコードです:server.php
<?php //声明一个函数add() ,并返回它的值 function add($a,$b){ return $a+$b; } //实例化一个SoapServer对象, 并将add函数注册成为其方法 $server = new SoapServer(null,array('uri'=>'http://localhost/')); //指定server端代码的URI(资源标志符) $server->addFunction("add"); $server->handle();?>
次に、クライアント側のコードを使用してサーバー側のコードを呼び出します。クライアント コードも非常に単純です。次のようになります。
これはクライアント側のコード client.php
<?php //建立一个参数数组,存储要访问的提供soap服务的计算机的地址与程序 $arrOptions=array( 'uri'=>'http://localhost/', 'location'=>'http://localhost/soap/server.php', //注意: 这个location指定的是server端代码在服务器中的具体位置, 我的是在本地根目录下的soap目录中, 'trace'=>true, ); $soapObject = new SoapClient(null,$arrOptions); //实例化客户端对象 echo $soapObject->add(20,30); //调用服务器端的函数add并返回值50?>
わかりました、終わりました!
推奨学習:「PHP ビデオ チュートリアル」
以上がphp ソープとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。