徐善通的随笔

千里之行, 始于足下



php使用soap简单实现webservice服务


开启Soap扩展

linux下参考

sudo apt-get install php7.2-soap

windows下找到php.ini 删除;extension=php_soap.dll前面的注释

重启nginx/apache服务

创建服务端文件server.php

服务端的方法内部的输出不能体现, 需要返回值给客户端

class server
{
    public function test()
    {
        echo 'test'; // 不会被输出
        return 'this is test';
    }

    public function max($a, $b)
    {
        return max($a, $b);
    }
}

// 此处没有使用wsdl, 如果使用wsdl, 那么第一个参数就是wsdl文件的地址
$params = [
    'uri' => 'server.php',
    'cache_wsdl' => WSDL_CACHE_NONE, // 不使用缓存
    'location' => 'http://data.test-xstnet.com/webservice/server.php'
];
// 创建 SoapServer 对象
$server = new SoapServer(null, $params);
// 导出 server 类中的全部函数
$server->setClass('server');
// 处理SOAP请求
$server->handle();

创建客户端文件client.php

$params = [
    'uri' => 'server.php',
    'cache_wsdl' => WSDL_CACHE_NONE, // 不使用缓存
    'location' => 'http://data.test-xstnet.com/webservice/server.php'
];

$client = new SoapClient(null, $params);

$res = $client->test();
$res2 = $client->max(100, 99);

// 调用服务端的方法
var_dump($res);
var_dump($res2);

访问服务端server.php 开启webservice服务

浏览器访问server.php对应的位置

alt

访问客户端调用服务端方法

alt

其实只需要服务端便可开启webservice服务, 使用客户端是方便测试

修改php.ini关闭缓存

在开发期间,可以通过使用soap.wsdl_cache_ttl php.ini设置禁用WSDL缓存,否则在soap.wsdl_cache_ttl到期之前对WSDL文件所做的更改将不起作用 。

修改php.ini
soap.wsdl_cache_enabled=1(改为0)
soap.wsdl_cache_ttl=86400(改为0)

重启nginx/apache服务

官方文档: https://www.php.net/manual/zh/soapclient.soapclient.php


作者: 徐善通
地址: https://www.xstnet.com/article-130.html
声明: 除非本文有注明出处,否则转载请注明本文地址


我有话说



最新回复


正在加载中....

Copyrights © 2016-2019 醉丶春风 , All rights reserved. 皖ICP备15015582号-1