ホームページ >バックエンド開発 >PHPの問題 >php ソープとはどういう意味ですか?

php ソープとはどういう意味ですか?

藏色散人
藏色散人オリジナル
2021-11-19 10:00:032351ブラウズ

Soap は XML および HTTP 通信プロトコルに基づいており、php で SOAP を使用するには、php の SOAP モジュール、つまり php.ini に「soap.so」を追加します。

php ソープとはどういう意味ですか?

この記事の動作環境: 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(&#39;uri&#39;=>&#39;http://localhost/&#39;)); //指定server端代码的URI(资源标志符)        $server->addFunction("add");        $server->handle();?>

次に、クライアント側のコードを使用してサーバー側のコードを呼び出します。クライアント コードも非常に単純です。次のようになります。

これはクライアント側のコード client.php

<?php     
//建立一个参数数组,存储要访问的提供soap服务的计算机的地址与程序        $arrOptions=array(            &#39;uri&#39;=>&#39;http://localhost/&#39;,            &#39;location&#39;=>&#39;http://localhost/soap/server.php&#39;,  //注意: 这个location指定的是server端代码在服务器中的具体位置, 我的是在本地根目录下的soap目录中,            &#39;trace&#39;=>true,        );        $soapObject = new SoapClient(null,$arrOptions); //实例化客户端对象        echo $soapObject->add(20,30); //调用服务器端的函数add并返回值50?>

わかりました、終わりました!

推奨学習:「PHP ビデオ チュートリアル

以上がphp ソープとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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