2014年7月

PHP SOAP中遇到的一个坑

  从PHP5开始,PHP中有了一个非常重要的SOAP扩展,它让我们发布和使用SOAP服务更加方便快捷。今天尝试使用SOAP时遇到了一个小小的“坑”。

  先建立服务程序: /data/www/effictivephp/servicefunction.php

<?php  

class ServiceFunctions

{
        public function getDisplayName($first_name, $last_name) {
                $name = '';
                $name .= strtoupper(substr($first_name, 0, 1));
                $name .= '  '.ucfirst($last_name);
                return $name;
        }

        public function countWords($paragraph) {
                $words = preg_split('/[. ,!?;]+/', $paragraph);
                return count($words);
        }
}

  接着建立服务端程序:/data/www/effictivephp/demo3.php

<?php 
include 'servicefunction.php';
$options = array('uri' => 'http://192.168.2.2/effictivephp/');            
$server = new SoapServer(NULL, $options);
$server->setClass('ServiceFunctions');
$server->handle();

  接着建立客户端程序:/data/effictivephp/demo4.php

<?php  
$options = array(
         'uri' => 'http://192.168.2.2/effictivephp/',
         'location' => 'http://192.168.2.2/effictivephp/demo3.php',
         'trace' => 1
);    
$client = new SoapClient(NULL, $options);
echo $client->getDisplayName('Joe', 'Bloggs');

  结果“坑”出来了,运行的时候爆出了错误:Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in。。。。。。。

  反复对照,代码没有问题啊,网上一查,结果有不少人报错了,原因是在SOAP服务程序的php开头有一个空行。。。删除即可。