如何使用PHP实现一个WebService
2020-11-26 13:38
标签:des style blog class code java 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 class code java 原文地址:http://www.cnblogs.com/sandea/p/3705709.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 "
";
?>

上一篇:js实现圆环进度条