如何使用PHP实现一个WebService
2020-12-02 07:17
标签:des style blog http java color WSDL(网络服务描述语言,Web
Services Description Language)是一门基于 XML 的语言,用于描述 Web Services
以及如何对它们进行访问。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。 一个
WSDL 文档的主要结构是类似这样的: WSDL
文档可包含其它的元素,比如 extension 元素,以及一个 service 元素,此元素可把若干个 web services 的定义组合在一个单一的
WSDL 文档中。 类代码(SoapDiscovery.class.php): 使用方法(服务端server.php): 客户端client.php: 1.
创建wsdl 在这里我只介绍标准的webservice。那么如何创建wsdl呢?对于PHP来说这确实是件很不容易的事情,有人说用zend
studio创建很方便,这是一种方法。但对于那些不喜欢用zend studio的人来说,会觉得创建一个webservice还要安装zend
studio,太强人所难了,我就是,嘿嘿。 在这里我介绍一个简单的方法,到网上下载SoapDiscovery.class.php类,里面有个公用方法:getWSDL,这个方法末尾是用的return,那么,你修改一下这个方法,我是这么做的: 现在生成wsdl的类有了,SoapDiscovery.class.php。 我只要再准备一个提供服务的类或者函数就可以创建wsdl了。比如我有个类:person,文件名为:person.class.php★,里面有两个方法,一个是say,一个是run。很简单。 到这里有两个类了:SoapDiscovery.class.php和person.class.php。 开始正式生成wsdl:创建文件server.php。将以下内容拷贝进去,运行即可生成一个person.wsdl文件 2.
创建webservice服务端程序 将server.php文件的内容清空,复制以下代码进去: 3.
创建webservice客户端程序,测试webservice是否有效,文件名是:client.php OK,结束。.NET如果要使用的话,你只要提供一个url给他就行了。 获得url的方法:你可以先到person.wsdl文件里面查找 .NET开发人员获得你给他的url之后,就可以在自己的项目里面添加一个服务引用或者web引用了,然后就可以根据提示完成相关操作,对于使用.NET的开发人员来说很简单的。 如何使用PHP实现一个WebService,搜素材,soscw.com 如何使用PHP实现一个WebService 标签:des style blog http java color 原文地址:http://www.cnblogs.com/yzh5251/p/3699812.htmlWSDL
definition of types........
definition of a message....
definition of a port.......
definition of a binding....
PHP生成WSDL
php
class SoapDiscovery {
private $class_name = ‘‘;
private $service_name = ‘‘;
/**
* SoapDiscovery::__construct() SoapDiscovery class Constructor.
*
* @param string $class_name
* @param string $service_name
**/
public function __construct($class_name = ‘‘, $service_name = ‘‘) {
$this->class_name = $class_name;
$this->service_name = $service_name;
}
/**
* SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
*
* @return string
**/
public function getWSDL() {
if (empty($this->service_name)) {
throw new Exception(‘No service name.‘);
}
$headerWSDL = "n";
$headerWSDL.= "
define(
‘WSDL_URL‘
,
‘hello.wsdl‘
);
//定义WSDL文件路径
ini_set
(
‘soap.wsdl_cache_enabled‘
,
‘0‘
);
//关闭WSDL缓存
//WSDL文件不存在时自动创建
if
(!
file_exists
(WSDL_URL))
{
require_once
‘SoapDiscovery.class.php‘
;
$disco
=
new
SoapDiscovery(
‘HelloWorld‘
,
‘IELIWB_HelloWorld‘
);
$str
=
$disco
->getWSDL();
file_put_contents
(WSDL_URL,
$str
);
}
//SOAP开启并接收Client传入的参数响应
$server
=
new
SoapServer(WSDL_URL);
$server
->setClass(
‘HelloWorld‘
);
$server
->handle();
//测试定义公开的类
class
HelloWorld {
private
$nombre
=
‘‘
;
public
function
__construct(
$name
=
‘World‘
) {
$this
->name =
$name
;}
public
function
greet(
$name
=
‘‘
) {
$name
=
$name
?
$name
:
$this
->name;
return
‘Hello ‘
.
$name
.
‘.‘
;}
public
function
serverTimestamp() {
return
time();}
}
?>
$client
=
new
SoapClient(
"http://127.0.0.1/createsoap/hello.wsdl"
);
try
{
$result
=
$client
->greet(
‘ieliwb‘
);
var_dump(
$result
);
echo
"The answer isresult"
;
}
catch
(SoapFault
$f
){
echo
"Error Message: {$f->getMessage()}"
;
}
?>
创建
Webservice
//return sprintf(‘%s%s%s%s%s%s‘, $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ‘‘);
//生成wsdl文件,将上面的return注释
$fso
=
fopen
(
$this
->class_name .
".wsdl"
,
"w"
);
fwrite(
$fso
, sprintf(
‘%s%s%s%s%s%s‘
,
$headerWSDL
,
$portTypeWSDL
,
$bindingWSDL
,
$serviceWSDL
,
$messageWSDL
,
‘‘
));
class
person
{
public
function
say()
{
return
(
"i‘m speaking."
);
}
public
function
run()
{
return
(
"i‘m running,don‘t disturb me please."
);
}
}
?>
php
include("person.class.php");
include("SoapDiscovery.class.php");
//第一个参数是类名(生成的wsdl文件就是以它来命名的),即person类,第二个参数是服务的名字(这个可以随便写)。
$disco = new SoapDiscovery(‘person‘,‘Person‘);
$disco->getWSDL();
?>
php
include("person.class.php");
$objSoapServer = new SoapServer("person.wsdl");//person.wsdl是刚创建的wsdl文件
//$objSoapServer = new SoapServer("server.php?wsdl");//这样也行
$objSoapServer->setClass("person");//注册person类的所有方法
$objSoapServer->handle();//处理请求
?>
php
$client = new SoapClient("person.wsdl");
//$client = new SoapClient("server.php?wsdl");//这样也行
echo($client->say());
echo "
";
echo($client->run());
echo "
";
?>