PHP使用SoapServer和SoapClient实现Web Service接口

白榆
白榆
发布时间:2026-10-14 | 2人浏览过
原创

本文介绍了利用PHP内置的SOAP扩展构建Web Service接口的具体方法。主要涵盖环境配置要求、服务端创建(含函数与类两种模式)以及客户端调用的完整代码示例。

准备条件:开启SOAP扩展

在编写代码前,必须确保服务器环境中已加载并启用了SOAP扩展。检查 php.ini 配置文件,找到以下行并确保未被注释:

extension=php_soap.dll;

修改保存后,重启Apache服务使配置生效。测试环境参考为:apache2.2.11,php5.2.10。

第1步:使用函数注册实现服务端与调用

这种模式适合简单的逻辑处理,只需将具体的函数名注册到 SsoapServer 即可对外提供。

1.1 服务端 (serverSoap.php)

服务端创建 SersoapServer 对象时,uri 参数应设置为服务器的IP或域名,用于标识该服务的命名空间。

$soap = new SoapServer(null,array('uri'=>"http://192.168.1.179/"));
// 仅注册特定函数 minus_func
$soap->addFunction('minus_func'); 
// 也可使用 SOAP_FUNCTIONS_ALL 注册所有已定义函数
// $soap->addFunction(SOAP_FUNCTIONS_ALL);
$soap->handle();

function minus_func($i, $j){
    $res = $i - $j;
    return $res;
}

1.2 客户端 (clientSoap.php)

客户端创建 SsoapClient 时,location 必须指向服务端的完整访问路径,uri 需与服务端设置的 uri 保持一致。

try {
    $client = new SoapClient(null,
        array('location' =>"http://192.168.1.179/test/serverSoap.php",
              'uri'     => "http://127.0.0.1/")
    );
    // 直接调用远程函数
    echo $client->minus_func(100,99);
} catch (SoapFault $fault){
    echo "Error: ",$fault->faultcode,", string: ",$fault->faultstring;
}

第2步:使用Class实现服务端与调用

对于业务逻辑复杂的项目,建议将相关方法和属性封装在类中,通过 setClass 统一发布,这样结构更清晰。

2.1 服务端

创建服务实例时传入空数组作为第一参数,并使用 setClass 指定一个已经定义的类。该类中的公有方法将自动成为Web Service接口。

$classExample = array();
$soap = new SoapServer(null,array(
    'uri' => "http://192.168.1.179/",
    'classExample' => $classExample
));
// 设置对外暴露的类名为 chesterClass
$soap->setClass('chesterClass');
$soap->handle();

class chesterClass {
    public $name = 'Chester';
    function getName() {
        return $this->name;
    }
}

2.2 客户端

调用方式与函数版类似,直接获取类实例的方法返回值即可。

try {
    $client = new SoapClient(null,
        array('location' =>"http://192.168.1.179/test/serverSoap.php",
              'uri'      => "http://127.0.0.1/")
    );
    // 调用类中的方法
    echo $client->getName();
} catch (SoapFault $fault){
    echo "Error: ",$fault->faultcode,", string: ",$fault->faultstring;
}

总结

PHP通过原生扩展即可快速搭建轻量级Web Service服务。关键区别在于 location(物理地址)决定连接哪里,而 uri(逻辑地址)决定解析哪个契约。以上就是PHP实现webservice接口功能与实例的详细教程,更多关于PHP网络编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表