RSS
热门关键字:  QQ密码破解  最新的盗QQ的软件  江淮影视  网页密码破解  最后诊断
当前位置 :| 主页>web技术>php>

实现 php webservice

来源: 作者: 时间:2007-12-11 Tag: 点击:
本文介绍的是php扩展库SOAP Functions. 本扩展库需要在编译的时候加--enable-soap, 并且需要libxml-2.5.4 以上版本支持。

      soap 相比nusoap来说,优势之一是用c开发并编译成php内部函数库,而NuSOAP 完全由PHP语言编写,由一系列PHP 类组成。优势之二,nusoap是很早以前就有的,从2005-07-27 之后就停止更新了,而Soap在php5版本新增,随着php6对webservice的支持,我相信soap这个函数库的地位肯定会不断上升。
       
      php5的Soap  函数库 使用起来很方便,wsdl可以使用zend Development Environment 开发工具生成。
注意几点问题 :
1. 为了提高效率,php对 wsdl文件提供了缓存功能,开发的时候可以将使用ini_set("soap.wsdl_cache_enabled", 0); 让其失效,因为开发过程经常要修改wsdl文件;

2. SOAP(Simple Object Access Protocol) 简单对象访问协议,在php5不仅仅可以提供对象setClass给远程访问调用,还可以提供方法addFunctions。所以SOAP中的 'O' 已经被扩展了 。

3. 服务端有可能取不到客户端POST过来的数据,这可能是php5 soap functions的bugs;解决办法在下文的服务端举例程序中有一段代码:
if (isset($HTTP_RAW_POST_DATA)) {
           $request = $HTTP_RAW_POST_DATA;
} else {
   $request = file_get_contents('php://input');
}
下面是举例程序源代码。


      soap客户端举例:


<?php

ini_set("soap.wsdl_cache_enabled", 0);
try{
   $soap = new SoapClient('authenticate/idolol.wsdl');
   $soap->get_avatar(230);
   $functions = $soap->__getFunctions();
   print_r($functions);
   $types = $soap->__getTypes();
   print_r($types);
}catch(SoapFault $fault){
   trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}

?>


     soap 服务端举例:

<?php

require './soap_functions.php';

ini_set("soap.wsdl_cache_enabled", 0);

$server = new SoapServer('authenticate/idolol.wsdl',array('encoding'=>'UTF-8'));
$server->addFunction(array("user_login","session_log","get_avatar","emergency"));
//$server->addFunction(SOAP_FUNCTIONS_ALL);

if (isset($HTTP_RAW_POST_DATA)) {
           $request = $HTTP_RAW_POST_DATA;
} else {
   $request = file_get_contents('php://input');
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
 $server->handle($request);
 
} else {
 
 echo "This SOAP server can handle following functions: ";
 
 $functions = $server->getFunctions();
 foreach($functions as $k=>$func) {
   echo $k.". ".$func . "\n";
 }
}

?>

栏目列表