PHP5中的SOAP扩展的应用及注意的问题

PHP5中的SOAP扩展的应用及注意的问题

既然说到SOAP就先对这个有个大概了解吧。

SOAP(简单对象访问协议)定义了客户机与服务器之间传递的消息。消息采用 XML 格式。SOAP 独立于平台、编程语言、网络和传输层。

这次做的项目中需要提供WebService服务,没话说,由于是PHP的项目,首先就按照习惯用了NuSOAP,结果让我郁闷了好久,程序返回的是一个数组,但是用print_r()打印出来是空的,用count()看了一下大小为1,郁闷ing。看了一下response数据是存在的啊。又对照了一下以前做的SOAP(是在PHP4上的),两个response有点不同,这才反应过来是PHP5跟PHP4的版本不一样。

打开php.ini,找到扩展模块那部分,把soap的模块加载上,又重新写了一下Server端和Client端,继续测试。总是出现“looks like we got no XML document”的error。难道是用法错了,手头正好有本《PHP5 Power Programming》找到SOAP的地方,没找到问题,又跑到zend的官方网站上看了一下SOAP的介绍和示例(http://www.zend.com/php5/articles/php5-SOAP.php?out=dynamicwebpages),没错啊。去Google搜索这个错误,最后还是连到了zend的一个blog上(http://www.zend.com/php5/articles/php5-SOAP.php?article=php5-SOAP&kind=php5&id=5085&open=1&anc=0&view=1),前半部分跟上面那个是一样的,直接跳过,看下面的Comment,发现好多人都遇到了这个问题,人提到是在PHP开始标签之前存在blank character,可我的没有啊,我的有个require_once("mainfile.php"),把这句注释掉以后就没问题了,又继续根据mainfile.php追踪下去,发现是在类的文件中PHP结束标签之后有blank character,删除掉就没问题了。

在zend上的comments里还有人提到是XML文件的编码问题,这个我没有测试。终于搞定了这个问题,继续写接口,哎……

郁闷本来想把全部代码贴上来,结果排版会有问题,还是贴些重要的吧!

Server端:

1 $web_service   =   new  SoapServer( null ,   array ( ' uri '   =>   ' ispfcn ' , ' encoding ' => ' gb2312 ' )); 
2 $web_service -> addFunction( " iGetUserList " );
3 $web_service -> addFunction( " iRegisterUser " );
4 $web_service -> addFunction( " iSetUserPwd " );
5 $web_service -> handle();

Client端:
 1 try  {
 2 $opts   =   array ( ' location '   =>   ' http://192.168.0.56/web_service.php ' , ' uri ' => ' ispfcn ' , ' encoding ' => ' gb2312 ' );
 3 $client   =   new  SoapClient( null , $opts );
 4 $custom_id = 1 ;
 5 $custom_name = " system " ;
 6 $custom_pwd = md5 ( " system " );
 7 $custom_flag = " sys " ;
 8 $start = 0 ;
 9 $limit = 0 ;
10 $result   =   $client -> iGetUserList( $custom_id , $custom_name , $custom_pwd , $custom_flag , $start , $limit );
11 for  ( $i = 0 ; $i < count ( $result ); $i ++ ){
12      echo   sprintf ( " %4d " , $result [ $i ][ ' user_id ' ]) . " : " . $result [ $i ][ ' username ' ] . "" ;
13     }
14 }
15 catch  (SoapFault  $e )
16 {
17 echo   $e -> faultcode , '   ' . $e -> faultstring . " n " ;
18 }

你可能感兴趣的:(PHP5中的SOAP扩展的应用及注意的问题)