开启php soap,php soap 开发文档

一. 必备知识

1.wsdl(web服务标记语言)

WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

具体参考请访问下面网址

2.soap

SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。

具体参考请访问下面网址

3.php扩展

具体参考请访问下面网址

二. php soap开发模式

1. working in swdl mode(契约先行(Contract first)模式)

契约先行模式使用了一个用XML定义的服务接口的WSDL文件。WSDL文件定义了服务必须实现或客户端必须使用的接口。SoapServer和SoapClient的WSDL模式就基于这个概念。也就是用soap通讯的时候必须先有一个定义过的服务接口,才能进行通讯。

2. working in non-swdl mode(代码先行(Code first)模式)

在代码先行模式中,首先要先写出实现服务的代码。然后在大多数情况下,代码会产生一个契约,换种说法,一个WSDL。接着客户端在使用服务的时候就可以使用那个WSDL来获得服务的接口。尽管如此,PHP5的扩展并没有从代码输出一个WSDL的规定,考虑到这种情况,可以在non-WSDL模式下使用 SoapServer和SoapClient。也就是说在soap通讯的时候并不需要一个预先定义过的服务接口,代码会自动的产生。

三.参考例子:

下面介绍如何使用WSDL模式和non-WSDL模式来实现服务和客户端。相对而言,使用WSDL模式来实现服务和客户端会比较容易。

1. noWSDL模式实现

服务端 server.php

class test

{

/**

*

* @return string

*/

function show()

{

return 'hello world!';

}

}

#####################################################

$server = new SoapServer(null, array('uri' => "http://test-uri/"));

$server->setClass('test');

$server->handle();

?>

客户端 client.php

$soap=new SoapClient(null, array(

'location' =>'http://soapserver_url/server.php',

print_r($soap->__getFunctions());

echo $soap->show();

?>

2. WSDL模式实现

第一步:编写服务端类文件

class..php

class test

{

/**

*

* @return string

*/

function show()

{

return 'hello world!';

}

}

?>

第二步:将类文件生成 wsdl文件server.wsdl。

由于wsdl文件编写比较复杂,所以我们用第三方工具生成。我们以zend studio为例子演示:

Tools ==> WSDL Generator ==> Configration name : test; WSDL file name: server

==>NEXT ==> 点击 + ==> 选择上面的创建的class.php ==> 这时候会看到一个 classes?? : URL Location的映射,保留 test类前面的勾,并将其url 设置为 SOAP Server的url:http://soapserver_url/server.php ==>点击Finish,ZDE就会创建一个非常漂亮的WSDL了?? 工作基本上完成了.

第三步:服务端编写:

require ' class..php ';  //引入类文件

$server = new SoapServer('server.wsdl');

$server->setClass('test');

$server->handle();

?>

第四步:客户端编写

$soap = new SoapClient('http:// soapserver_url/server.wsdl');

print_r($soap->__getFunctions());

echo $soap->show();

以上两个例子只是一个简单的soap服务编写,已经可以满足大部分需要。如果需要更加高级的功能请参考其他方面的资料。

三. 出现的问题。

1.在方法中对属性的赋值在其他方法中不起作用。

比如在客户端调用服务端某个方法对某个属性赋值。

在其他方法里就不能用。但在 __construct 方法中对属性的赋值是可以个在其他方法中使用的。

2. 提示 Client] looks like we got no XML document错误。

服务器端文件在<?php ?> 标签前后都不要有任何数据包括空格,空行。

3. Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity

原因如下:PHP程序作为 SOAP客户端 采用 WSDL 模式访问远端服务器的时候,PHP是通过调用 libcurl 实现的。至少在 PHP5.2.X 是这样的。如果采用 non-WSDL 模式,就不需要 libcurl。在solaris 没有缺省安装 libcurl,也许是我没有安装。除了 了ibcurl以外,至少还关联的库包括:

libidn,ibgcc,libiconv,libintl,openssl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识点2

1. DUMMY是不是检查所有的类型的权限呢&#xff1f;PS:不是&#xff0c;dummy的意思是虚拟的意思&#xff0c;就是说权限检查的时候有这个权限检查字段&#xff0c;但是不对该字段做权限检查。AUTHORITY-CHECK OBJECT Z_BRANDID ACTVT DUMMY ID BRAND FIELD p_br…

java调用jndi出错,无法使用Java JNDI上下文查找来访问对象

我正在运行Tomcat6并希望从我的Servlet访问数据源。但我得到了javax.naming.OperationNotSupportedException: cant generate an absolute name for this namespaceat org.apache.naming.NamingContext.getNameInNamespace(NamingContext.java:772)我的context.xml在HomeContro…

java是如何实现原语的_Java中的低GC:使用原语而不是包装器

java是如何实现原语的总览 有两个很好的理由在可能的地方使用原语而不是包装器。 明晰。 通过使用原语&#xff0c;您可以清楚地知道null值是不合适的。 性能。 使用原语通常更快。 清晰度通常比性能更重要&#xff0c;并且是使用它们的最佳理由。 但是&#xff0c;本文讨论…

MFC 错误异常,用vs添加资源并为资源定义类后报错:error C2065 : 未声明的标识符...

添加了一个Dialog资源&#xff0c;修改了ID之后右击资源添加了一个类&#xff0c;在类里面有一个成员变量&#xff1a; // 对话框数据 enum { IDD IDD_GETIN }; 而在编译过程中出现报错&#xff0c;错误代号是error C2065 : 未声明的标识符&#xff0c;我的第一反应是为什么…

php 正则匹配数字范围,正则表达式之匹配数字范围

最近有个需求就是根据产品编号批量下架产品&#xff0c;需要下架日期为16-31号之间的产品&#xff0c;比如编号为B201607280023匹配表达式如下:^201607(1[6-9]|2[0-9]|3[0-1]).逻辑很简单&#xff0c;如果是必须是1或2或3开头&#xff0c;如果是1开头则后面范围为6-9&#xff0…

php 取utc时间,得到UTC时间在PHP

使用gmdate将始终返回GMTdate。 语法与date相同。一个简单的gmdate()就足够了$time time(); $check $timedate("Z",$time); echo strftime("%B %d, %Y %H:%M:%S UTC", $check);正如以前在这里回答的那样 &#xff0c;从PHP 5.2.0开始&#xff0c;您可以…

BrnShop开源网上商城第二讲:ASP.NET MVC框架

BrnShop开源网上商城第二讲&#xff1a;ASP.NET MVC框架 原文:BrnShop开源网上商城第二讲&#xff1a;ASP.NET MVC框架在团队设计BrnShop的web项目之初&#xff0c;我们碰到了两个问题&#xff0c;第一个是数据的复用和传递&#xff0c;第二个是大mvc框架和小mvc框架的选择。下…

tomcat不停机部署_Tomcat中的零停机部署(和回滚); 演练和清单

tomcat不停机部署亲爱的大家&#xff0c; 如果您认为Tomcat不能再进步&#xff0c;那您就错了。 Tomcat 7引入了所谓的并行部署 。 这是由SpringSource / VMWare贡献的。 简而言之&#xff0c;并行部署是指能够并行部署一个以上版本的Web应用程序&#xff0c;从而使所有版本都…

dataframe建一个空的,创建一个空的Pandas DataFrame,然后填充它?

我想用时间序列计算中的值迭代地填充数据框 . 所以基本上&#xff0c;我想初始化数据框&#xff0c;包括列A&#xff0c;B和时间戳行&#xff0c;全部为0或全部为NaN .然后我会添加初始值并检查此数据&#xff0c;计算前一行中的新行&#xff0c;比如行[A] [t] 行[A] [t-1] 1左…

Android给TextView和EditText等控件设置透明背景、圆角边框

第一种方法&#xff1a;在drawable文件夹下新建一个文件设置背景样式 代码&#xff1a; 在drawable文件夹下面新建text_view_border.xml <?xml version"1.0" encoding"UTF-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/…

将jOOQ与JDBC比较

本文是我们学院课程的一部分&#xff0c;标题为jOOQ –类型安全的数据库查询 。 在SQL和特定关系数据库很重要的Java应用程序中&#xff0c;jOOQ是一个不错的选择。 当JPA / Hibernate抽象过多&#xff0c;JDBC过多时&#xff0c;这是一种替代方法。 它显示了一种现代的领域特…

matlab三维选取二维,基于Matlab绘制二维和三维图形以及其他图形控制函数的使用方法...

Matlab绘图强大的绘图功能是Matlab的特点之一&#xff0c;Matlab提供了一系列的绘图函数&#xff0c;用户不需要过多的考虑绘图的细节&#xff0c;只需要给出一些基本参数就能得到所需图形&#xff0c;这类函数称为高层绘图函数。此外&#xff0c;Matlab还提供了直接对图形句柄…

迭代器生成器可迭代对象_使用迭代器时如何避免ConcurrentModificationException

迭代器生成器可迭代对象Java Collection类是快速失败的&#xff0c;这意味着如果在使用迭代器遍历某个线程的同时更改了Collection&#xff0c;则iterator.next&#xff08;&#xff09;将抛出ConcurrentModificationException 。 在多线程以及单线程环境中都可能出现这种情况。…

Console命令详解,让调试js代码变得更简单

刚刚在浏览关于js方面的博客时发现这个方法挺好玩的&#xff0c;自己爽了一把。 1 <script> 2 console.time(/X(.)X/ test); 3 "XX".match(/X(.)X/); 4 console.timeEnd(/X(.)X/ test); 5 </script> 然后恶补了一下关于Firebug控制台的知识。熟练地使用…

mysql as tmp,启动mysql时显示:/tmp/mysql.sock 不存在的解决办法

启动mysql时显示&#xff1a;/tmp/mysql.sock 不存在的解决方法启动mysql时显示&#xff1a;/tmp/mysql.sock 不存在的解决方法启动mysql时报错的解决(mysql 5.0.45 redhat as43)启动mysql时报错的解决(mysql 5.0.45 redhat as 43)作者: lawzjf(http://lawzjf.itpub.net)发表于…

PHP求体重成绩函数,PHP数组

数组提出一个问题&#xff1a;一个养鸡场有6只鸡&#xff0c;他们的体重分别为3kg&#xff0c;5kg&#xff0c;1k个&#xff0c;3.4kg&#xff0c;2kg&#xff0c;6.kg请问这六只鸡的总体重是多少平均体重是多少请你用现在掌握的技术编一个程序现在我们使用现有的技术来解决问题…

Sublime Text 3插件之Emmet:HTML/CSS代码快速编写神器

一、快速编写HTML代码 1. 初始化 HTML文档需要包含一些固定的标签&#xff0c;比如<html>、<head>、<body>等&#xff0c;现在你只需要1秒钟就可以输入这些标签。比如输入“!”或“html:5”&#xff0c;然后按Tab键&#xff1a; html:5 或!&#xff1a;用于…

批处理停止php服务,通过批处理启动和停止MSSQL+IIS

电脑安装了不少的开发工具环境&#xff0c;如MSSQL2005(2000)IIS\MySQLApache等等&#xff0c;开机和娱乐时为了加快速度&#xff0c;都得把这些占用内存的开发工具系统服务停止&#xff0c;每项手工操作明显麻烦&#xff0c;用批处理就简单多了... 点一下启动&#xff0c;再点…

k8s secret使用_Java Secret:使用枚举构建状态机

k8s secret使用总览 Java中的枚举比许多其他语言更强大&#xff0c;可以导致令人惊讶的用途。 在本文中&#xff0c;我概述了Java 枚举的一些单独功能&#xff0c;并将它们放在一起形成一个状态机。 单例和实用程序类的枚举 您可以非常简单地将枚举用作Singleton或Utility。…

mydumper备份原理和使用方法

mydumper介绍 MySQL自身的mysqldump工具支持单线程工作&#xff0c;依次一个个导出多个表&#xff0c;没有一个并行的机&#xff0c;这就使得它无法迅速的备份数据。 mydumper作为一个实用工具&#xff0c;能够良好支持多线程工作&#xff0c;可以并行的多线程的从表中读入数据…