利用SOAP扩展开发WebService(PHP)

PHP实现WebService,它作为一种扩展存在于PHP中。php官方的SOAP扩展,优势是用c开发,相比nusoap效率上较优。

1.在默认情况下,这个扩展是没有被开启的。打开 php.ini 文件,找到;extension=php_soap.dll这行,去掉注释符“;”,保存并重启 Apache 服务。

SoapServer类和SoapClient类有两种操作模式:WSDL模式和non-WSDL模式。

在WSDL模式中,构造器可以使用WSDL文件名作为参数,并从WSDL中提取服务所使用的信息。non-WSDL模式中使用参数来传递要使用的信息。

服务端soapService.php:<?php /* wsdl方式提供WebService $server = new SoapServer('Calculator.wsdl'); */ //non-wsdl方式提供WebService(指定相应的uri) $server = new SoapServer(null,array("uri"=>"soapService.php")); $server -> setClass("Calculator"); $server -> handle(); Class Calculator { /** * Add the two figures together * @param $num1 * @param $num2 */ function addition($num1,$num2) { $result = $num1+$num2; return "{$num1} 加 {$num2} ,结果为 ".$result." !"; } } ?>然后利用Zend Studio将此php类文件生成WSDL文件。

客户端soapClient.php<?php try { /* wsdl方式调用WebService(函数改动后须重新生成wsdl) $soap = new SoapClient("http://localhost/WebService/Calculator.wsdl"); */ //non-wsdl方式调用WebService $soap = new SoapClient(null, array( 'location'=> "http://localhost/WebService/soapService.php", 'uri' => 'soapService.php' ) ); //两种方式调用函数 $result1 = $soap->addition ( 200, 160 ); $result2 = $soap->__soapCall ( "addition", array (50, 70 ) ); echo $result1 . "<br/>" . $result2; } catch ( SoapFault $e ) { echo $e->getMessage (); } catch ( Exception $e ) { echo $e->getMessage (); } ?>