DAY1:php and webservice
来源:互联网 发布:泽塔行动知乎 编辑:程序博客网 时间:2024/04/28 18:31
Section 2. SOAP
NuSOAP介绍:
NuSOAP是一组开源的,用来通过HTTP收发SOAP消息的PHP类,由NuSphere Corporation (http://www.nusphere.com
) 开发。NuSOAP的一个优势是他不是一个扩展程序,而是纯粹用PHP代码写的,所以适用范围比较广。
结构:
安装配置:
从 http://dietrich.ganx4.com/nusoap/ 下载,从zip文件中解出nusoap.php文件放到include目录,在你的脚本前面加上
include('nusoap.php');
就搞定了。
范例:
下面是一个简单的SOAP client程序: soap_client.php 执行
//simple client
require('nusoap.php');
//要发送的变量
$myString="world";
//parameters must be passed as an array
//变量必须要转换成数组的形式
$parameters=array($myString);
//创建一个soapclient对象,参数是server的URL
$s=new soapclient('http://www.douzi.org/me/php_ws/soap_server.php');
//调用远程方法,返回值存放在$result
//返回值为PHP的变量类型,如string, integer, array
$result=$s->call('echoString', $parameters);
//错误检测
if (!$err=$s->getError()) {
echo 'Result: '.$result; //success
} else {
echo 'Error: '.$err;
}
//调试,以下是SOAP请求(request)和回应(response)的报文,包括HTTP头
echo "<xmp>".$s->request."</xmp>";
echo "<xmp>".$s->response."</xmp>";
?>
require('nusoap.php');
//要发送的变量
$myString="world";
//parameters must be passed as an array
//变量必须要转换成数组的形式
$parameters=array($myString);
//创建一个soapclient对象,参数是server的URL
$s=new soapclient('http://www.douzi.org/me/php_ws/soap_server.php');
//调用远程方法,返回值存放在$result
//返回值为PHP的变量类型,如string, integer, array
$result=$s->call('echoString', $parameters);
//错误检测
if (!$err=$s->getError()) {
echo 'Result: '.$result; //success
} else {
echo 'Error: '.$err;
}
//调试,以下是SOAP请求(request)和回应(response)的报文,包括HTTP头
echo "<xmp>".$s->request."</xmp>";
echo "<xmp>".$s->response."</xmp>";
?>
相应的server端程序: soap_server.php
//simple server
require('nusoap.php');
//创建一个新的soap_server对象,并注册允许远程调用的方法
$s=new soap_server;
$s->register('echoString');
$s->register('echoArray');
/*
[文章中说: 缺少了注册这一步,任何PHP函数都将可以进行远程调用,这将是一个极大的安全隐患。但是我尝试过注册是必须的。而且只有将结果return的函数才能直接声明为远程方法,比如echo()就不行,而strtolower()就可以。]
*/
function echoString($inputString) {
//类性检查
if(is_string($inputString)) {
return "Hello, ".$inputString;
} else {
//soap_fault类用于产生错误信息
return new soap_fault('client', '', 'The parameter to this service must be a string.');
//soap_fault(faultcode, faultactor, faultstring, faultdetail);
//上面是错误处理类的构造函数的格式
//faultcode 必须值。可以设置为client或server,来表明错误发生在哪一端。
//faultactor 在NuSOAP中尚未实现。
//faultstring 错误信息。
//faultdetail 详细错误信息。你可以使用XML标记。
//除了构造函数外,soap_fault类还有一个serialize()方法
//它将错误信息序列化,然后返回一个完整的SOAP报文,范例:
/*
$fault = new soap_fault('client', '', 'The inputString parameter must not be empty');
echo $fault->serialize();
*/
}
}
//演示数组类型的使用
function echoArray($inputString) {
return $inputString[0]."+".$inputString[1];
}
//最后一步是把所有的收到的post数据都传递给SOAP server的service方法。它将处理请求,并调用相应的函数。
$s->service($HTTP_RAW_POST_DATA);
?>
require('nusoap.php');
//创建一个新的soap_server对象,并注册允许远程调用的方法
$s=new soap_server;
$s->register('echoString');
$s->register('echoArray');
/*
[文章中说: 缺少了注册这一步,任何PHP函数都将可以进行远程调用,这将是一个极大的安全隐患。但是我尝试过注册是必须的。而且只有将结果return的函数才能直接声明为远程方法,比如echo()就不行,而strtolower()就可以。]
*/
function echoString($inputString) {
//类性检查
if(is_string($inputString)) {
return "Hello, ".$inputString;
} else {
//soap_fault类用于产生错误信息
return new soap_fault('client', '', 'The parameter to this service must be a string.');
//soap_fault(faultcode, faultactor, faultstring, faultdetail);
//上面是错误处理类的构造函数的格式
//faultcode 必须值。可以设置为client或server,来表明错误发生在哪一端。
//faultactor 在NuSOAP中尚未实现。
//faultstring 错误信息。
//faultdetail 详细错误信息。你可以使用XML标记。
//除了构造函数外,soap_fault类还有一个serialize()方法
//它将错误信息序列化,然后返回一个完整的SOAP报文,范例:
/*
$fault = new soap_fault('client', '', 'The inputString parameter must not be empty');
echo $fault->serialize();
*/
}
}
//演示数组类型的使用
function echoArray($inputString) {
return $inputString[0]."+".$inputString[1];
}
//最后一步是把所有的收到的post数据都传递给SOAP server的service方法。它将处理请求,并调用相应的函数。
$s->service($HTTP_RAW_POST_DATA);
?>
复杂数据类型的使用:
- 数组。以下是生成的SOAP的Body部分代码:
string1
string2 - 生成复合数据类型(compound types samples),使用soapval。以下是生成的SOAP的Body部分代码:
123 Freezing Lane
Nome
Alaska
12345
1234567890
0987654321
程序范例: soapval.php 执行//soapval: general compound types samples
include('nusoap.php');
$address=array(
'street'=>'123 Freezing Lane',
'city'=>'Nome',
'state'=>'Alaska',
'zip'=>12345,
'phonenumbers'=>array('home'=>'1234567890', 'mobile'=>'0987654321')
);
$s=new soapval('myAddress', 'address', $address, '', 'http://myNamespace.com');
print "<xmp>".$s->serialize()."</xmp>";
?>
WSDL
WSDL是一种用于描述Web Service的XML语言。它是一种机读格式,把所有的访问服务所必须的信息提供给Web Service客户端。NuSOAP专门提供一个类进行WDSL文件的解析,并且从中提取信息。soapclient对象使用wsdl类来减轻开发者调用服务的难度。通过WSDL信息的帮助来创建报文,程序员仅仅需要知道操作的名字和参数就能调用它。
通过NuSOAP使用WSDL提供以下几点优点:
- 所有的服务元文件,如命名空间(namespaces),endpoint URLs,参数名(parameter names)等等都可以直接从WSDL文件获得,这样就允许客户端动态的适应服务器端的变化。因为从服务器随时可以获得,所以这些数据不再需要在用户脚本中使用硬性编码。
- 它允许我们使用soap_proxy类。这个类派生自soapclient类,增加了WDSL文件中详细列出的操作所对应的方法。现在用户通过它可以直接调用这些方法。
- soapclient类包含一个getProxy()方法,它返回一个soap_proxy类的一个对象。soap_proxy类派生自soapclient类,增加了对应于WSDL文档中定义的操作的方法,并且允许用户调用一个endpoint的远程方法。这仅仅适用于soapclient对象用WDSL文件初始化的情况。优点是易于用户使用,缺点是性能--PHP中创建对象是耗时的--且不为功利目的服务(and this functionality serves no utilitarian purpose)。
范例: wsdl.php 执行
//wsdl的一个简单演示文件
include('nusoap.php');
//SOAP源为一个提供明星生卒年月的service
//首先我们创建一个soapclient对象,把WSDL文件的URL传递给构造函数,
//之后还要使用第二个参数以便使client知道我们传递过来的是WSDL,而不是SOAP endpoint。
$s=new soapclient('http://www.abundanttech.com/webservices/deadoralive/deadoralive.wsdl', 'wsdl');
//生成proxy类
$p=$s->getProxy();
//调用远程函数
$sq=$p->getTodaysBirthdays();
if (!$err=$p->getError()) {
print_r($sq);
} else {
print "ERROR: $err";
}
print 'REQUEST:<xmp>'.$p->request.'</xmp>';
print 'RESPONSE:<xmp>'.str_replace('><', ">/n<", $p->response).'</xmp>';
?>
include('nusoap.php');
//SOAP源为一个提供明星生卒年月的service
//首先我们创建一个soapclient对象,把WSDL文件的URL传递给构造函数,
//之后还要使用第二个参数以便使client知道我们传递过来的是WSDL,而不是SOAP endpoint。
$s=new soapclient('http://www.abundanttech.com/webservices/deadoralive/deadoralive.wsdl', 'wsdl');
//生成proxy类
$p=$s->getProxy();
//调用远程函数
$sq=$p->getTodaysBirthdays();
if (!$err=$p->getError()) {
print_r($sq);
} else {
print "ERROR: $err";
}
print 'REQUEST:<xmp>'.$p->request.'</xmp>';
print 'RESPONSE:<xmp>'.str_replace('><', ">/n<", $p->response).'</xmp>';
?>
- DAY1:php and webservice
- DAY1:php and webservice
- CXF WebService笔记day1.txt
- PHP学习Day1
- PHP day1-3
- php基础学习day1
- 1.初识PHP day1
- php自学day1
- 软件测试 day1 and 2
- php入门到放弃 . Day1
- PHP webservice
- webservice php
- PHP webservice
- php webservice
- PHP学习-DAY1-PHP基础1
- Day1
- day1
- day1
- 幸运28预测软件。PC蛋蛋刷钱```
- 2011程序员薪资调查揭晓
- nagios全攻略
- 上班第一天,一头雾水
- C++面向对象编程入门:构造函数与析构函数
- DAY1:php and webservice
- 8大你不得不知的Android调试工具
- 最小矩形
- wbc特征提取
- Asp.Net中OnClientClick与OnClick 的区别
- Android应用程序中用Java创建本地进程来执行C/C++程序
- 关于javascript confirm 取消依然能提交表单的问题
- 新的开始
- hdu 2871 Memory Control