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은 XML로 작성된 문서인 Web Services Description Language를 말합니다. 이 문서에서는 웹 서비스에 대해 설명합니다. 서비스의 위치와 이 서비스가 제공하는 작업을 지정합니다.
저는 PHP로 일하고, 당신은 Java로 일하고, 그는 .net으로 일합니다. 우리 셋이서 통신하고 데이터를 교환하고 싶다면 어떨까요? 우리 모두와 소통할 수 있는 도구가 필요합니다. 비누, wsdl은 서로 다른 운영 체제에서 실행되고 서로 다른 기술과 프로그래밍 언어를 사용하는 애플리케이션이 서로 통신할 수 있도록 만들어졌습니다.
2. 예제
PHP에서 비누를 사용하려는 경우 일반적인 방법은 PHP의 비누 모듈을 추가하고 php.ini에 비누.so를 추가하는 것입니다. 다음은 비누.so 파일을 추가하지 않는 예입니다. 비누
//包函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
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) . ' '; ?>
를 사용하세요. 클라이언트이든 서버이든 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 코드도 매우 간단합니다. 다음과 같습니다:
이것은 클라이언트측 코드입니다 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!