应用NuSoap构建新型的基于PHP的Web服务

 更新时间:2016年11月25日 15:18  点击:1935
许多机构已经采用了Apach和PHP作为他们的Web应用环境。在Web services模式中采用PHP可能看上去可能会比较难。但是事实上,搭配NuSoap,你可以轻松的应用PHP构建SOAP的客户端和服务器端。

一个例子便能说明一切,让我们先看一个例子

为了说明如何应用NuSoap和PHP来构建Web services,我们将举一个简单的例子。这个例子应用程序由一个PHP Web services的服务器端和客户端组成。他将实现两个功能:颠倒一个字符串字符的顺序,求两个数的和。

PHP SOAP服务器
用PHP和NuSoap来建立SOAP服务器非常容易。基本上,你只要写出你想要暴露给你的Web services的函数,然后用NuSoap去注册它们就可以了。

OK,另外还需要两步才能完成PHP SOAP服务器的建立。首先你还要在你的PHP代码中创建NuSoap对象的一个实例,然后用HTTP POST方法将原始数据传给NuSoap进行处理。听起来简单吧。先看看清单1。

清单1:soapfunc.php
<?
require_once('nusoap.php');
function reverse($str){
    $retval = "";
     if(strlen($str) < 1) {
    return new soap_fault('Client','','Invalid string');
     }
     for ($i = 1; $i <= strlen($str); $i++) {
        $retval .= $str[(strlen($str) - $i)];
     }
    return $retval;
}
function add2numbers($num1, $num2) {
     if (trim($num1) != intval($num1)) {
        return new soap_fault('Client', '', 'The     first number is invalid');
    }
    if (trim($num2) != intval($num2)) {
    return new soap_fault('Client', '', 'The second number is invalid');
    }
    return ($num1 + $num2);
}
?>
清单1给出了soapfunc.php的源文件。这个文件包含了我们想通过SOAP协议暴露给Web services的两个函数:reverse和add2numbers,它们是我们这个Web services 应用的核心。函数reverse带一个参数,颠倒字符串中的字符的顺序,然后返回。
作者:田占海

1 引言
如果你是一个程序员,可能常常为不能按时完成任务而苦恼。如果你是一个项目经理,可能会觉得开发符合预算和进度要求的软件简直难于上青天。实际上,软件项目常常严重超期或超出预算仍是困扰着绝大多数软件机构的难题。据美国一份评估报告显示,17个主要的国防部软件合同中,平均28个月的进度计划推迟了20个月才完成。一个4年应该完成的任务,7年还未提交,其中没有一个项目按时完成。由于存在软件问题,B1轰炸机的部署被推迟了,同样的原因,580亿美元的A12飞机计划也被部分取消了。持续了二三十年的软件危机为什么愈演愈烈?软件开发为什么如此之难?本文试结合作者的体会对软件开发的困难之处做一剖析,并提出一些建议。
2 困难所在
2.1 极大的复杂性
大多数大型软件软件产品由几十甚至几百万行源代码构成,例如:Windows95操作系统由大约1100万行代码组成。每一行代码都可能影响到程序的其它部分,并且各个部分之间都可能互相影响。这样一个错综复杂的巨大系统当中,每一个小小的错误都可能导致整个系统崩溃。有些大型软件,例如Windows,可能是人类曾经建造过的最复杂的事物之一,从古至今最复杂的建筑都无法与之相比。
2.2 高度的不确定性
一个软件项目从一开始就存在许多不确定性因素。其一:用户需求很难确定。这是因为软件开发者很难详细了解用户的需求,甚至用户在看到产品之前也不清楚自己到底需要什么,所以从项目开发的自始至终都可能会有新的需求提出,致使系统结构不断修改,最终面目全非。其二:设计不完全可以预测。有时,一个设计时认为可行的方案,在实现时可能行不通,或者最初的设计方案存在很大的缺陷而没有及时发现,或者突然一个设计时没有料到的技术难点阻挡了项目的进度。从设计到实现实际上有着很大的不可预测性。其三:用户需求不断变化,如果最初的用户需求没有了解的很清楚,可能整个项目很快就会陷在不断变化的需求之中不能自拔。其四:客观条件的不确定性。在项目的进展过程中,可能会有人员的流动,可能会有资源的调整,可能会有这样或那样的客观条件的限制而阻挡了项目的正常进行。在这样高度的不确定之中,在较早阶段精确估计一个项目不只是很难地,甚至是不可能的。
3 造成工期延误的原因
3.1 开发人员的过分乐观
许多开发人员倾向于一切都会进展顺利,这种盲目的自信对于项目开发来说是不对的。如果按照最乐观的估计,可能绝大多数任务都不能按时完成,因为在软件开发中不确定因素实在太多了。对于任务的复杂性和难度,对于自己能支配的时间,对于可能的突发事件的干扰等没有清楚的认识和估计,即使对自己的时间表作出保证,也可能常常无法按时交货。
转载自eNet(http://www.etechnic.com.cn/document/20010111/2001011111291801.shtml)
时间:2001/01/11 11:29 作者:dodo OSO奥索
 PHP 4.04 用了已经一段时间了,感觉很好,特别是这个 3M 多的完整版本自带了很多好东东。但是看到有不少朋友还在用老的版本,特此推荐。
地址:http://www.php.net/downloads.php
PHP 4.0.4 - 19 December 2000
(3.79 Mb CGI binary and ISAPI module included, MySQL support built-in, many
extensions included, packaged as zip)
(3.79 Mb 已经包含了 CGI 和 ISAPI 模块,内建对 MySQL 的支持,包含了许多扩展模块,Zip 格式)
  本地下载
附带的说明 E 文太长了,现在只说一下在 Apache 下的安装(大多数人都用 Apache 的吧?):
先假设 Apache 安装在 c:Apache 下,PHP 解压到 c:PHP 下,windows 目录是
c:windows (win98) 或者 c:winnt (win2000)。
1. 关闭 Apache.
编辑 c:Apacheconfhttpd.conf ,根据你的情况加入这几行:
2. 把 c:PHPphp4ts.dll 拷到 c:windowssystem (win98) 或者
c:winntsystem32 (win2000) 下,覆盖任何原有文件。
# 以 Apache 模块方式安装,在 httpd.conf 中加入如下几行:
LoadModule php4_module c:/php/sapi/php4apache.dll
AddType application/x-httpd-php .php
(是不是比用那个 mod_php4-4.x.zip 方便多了)
# 以 CGI 方式安装,在 httpd.conf 中加入如下几行:
ScriptAlias /php/ "C:/php/"
Action application/x-httpd-php4 "/php/php.exe"
AddType application/x-httpd-php4 .php
3. 把 c:php.ini-dist 拷到 c:windows (win98) 或者 c:winnt (win2000), 改
名为 php.ini, 根据你的需要编辑它。
必须要改的是 extension_dir = c:/php
4. 重起 Apache.

一、安装Apache    
到发布Apache的官方站点htp://www.apache.org/dist,将apache_1_3_x.win32.exe下载到你的本机上并将其运行安装到c:Apache。如果安装没出什么错的话,安装完毕之后,Apache就可以开始使用了。其中在Apache的安装目录下面有很多readme文件可供参考,但仅有一个文件是讲Win32平台的,包括Window 9x和Windows NT。
 
二、安装PHP    
到PHP的官方发布站点上,选择一个镜像,找到下载区域,选择“Source code and Windows distribution”,下载“Windows Binary”。你只须要将当下来的文件解压到你喜欢的目录中,如C:PHP4B3.我推荐用版本号作为目录名,这样将来你试用更新版本时,无须删掉老的版本。在Windows 95/97下安装PHP4 Beta,需要有DCOM的支持。如果你的机器上未装, 到这里去下载一份。
 
三、配置PHP    
与PHP一起分发的文件包里有一个PHP的主要配置文件PHP.INI-dist。将它拷贝到你的Windows系统目录(Windows 9x的Windows或Windows NT的WinNT目录),并且改名为PHP.INI。需要对此文件作适当的修改,最主要的事情是加入一些可能要用到的模块,象加入MySQL的支持等。在PHP.INI文件中找到“Dynamic Extensions”一栏:
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;    
修改 ;extension=php_mysql.dll    
除去前边的";"号    
在特定情况下,如果你想要用的DLL文件不在这个列表中,只需要简单地加上一行,如: “extension=mydll.dll”。这样,PHP就配置好了。
 
四、让Apache与PHP一起工作    
找到第一节里你安装Apache的目录,用你喜欢的文件编辑器打开.confhttpd.conf文件,在本例中是c:Apacheconfhttpd.conf(这个是APACHE的最主要的配置文件)。要让Apache与PHP一起工作,你只要加入几行即可,如下:    
ScriptAlias /php4b3/ "C:/PHP4B3/"    
AddType application/x-httpd-php3 .php3    
AddType application/x-httpd-php3 .php    
AddType application/x-httpd-php3 .phtml    
Action application/x-httpd-php3 "/php4b3/php.exe"    
Apache Core Features
These configuration parameters control the core Apache features, and are always available.
AccessConfig directive
Syntax: AccessConfig filename
Default: AccessConfig conf/access.conf
Context: server config, virtual host
Status: core
The server will read this file for more directives after reading the ResourceConfig file. Filename is relative to the ServerRoot. This feature can be disabled using:
AccessConfig /dev/null
Historically, this file only contained <Directory> sections; in fact it can now contain any server directive allowed in the server config context.
--------------------------------------------------------------------------------
AccessFileName directive
Syntax: AccessFileName filename filename ...
Default: AccessFileName .htaccess
Context: server config, virtual host
Status: core
Compatibility: AccessFileName can accept more than one filename only in Apache 1.3 and later
When returning a document to the client the server looks for the first existing access control file from this list of names in every directory of the path to the document, if access control files are enabled for that directory. For example:
AccessFileName .acl
before returning the document /usr/local/web/index.html, the server will read /.acl, /usr/.acl, /usr/local/.acl and /usr/local/web/.acl for directives, unless they have been disabled with
<Directory />
AllowOverride None
</Directory>
--------------------------------------------------------------------------------
AddModule directive
Syntax: AddModule module module ...
Context: server config
Status: core
Compatibility: AddModule is only available in Apache 1.2 and later
The server can have modules compiled in which are not actively in use. This directive can be used to enable the use of those modules. The server comes with a pre-loaded list of active modules; this list can be cleared with the ClearModuleList directive.
[!--infotagslink--]

相关文章

  • 通过两种方式增加从库――不停止mysql服务

    一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快...2015-11-08
  • 安全地关闭MySQL服务的教程

    普通关闭 我的mysql是自己下载的tar包,自己设定安装目录来安装的。停止mysql服务,说来简单,但不知道的话,还真是挠头。在这和mysql入门的同学们共享:)正确方法是,进入mysql的bin目录下,然后执行./mysqladmin -uroot -p shut...2015-11-24
  • JS跨浏览器解析XML应用过程详解

    这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
  • vue配置多代理服务接口地址操作

    这篇文章主要介绍了vue配置多代理服务接口地址操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-08
  • C# Soap调用WebService的实例

    下面小编就为大家带来一篇C# Soap调WebService的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • AngularJS 服务详细讲解及示例代码

    本文主要介绍AngularJS 服务,这里整理了AngularJS 服务的基本知识资料,并附示例代码和实现效果图,有兴趣的小伙伴可以参考下...2016-08-24
  • AngularJS内建服务$location及其功能详解

    这篇文章主要为大家详细介绍了AngularJS内建服务$location及$location功能,感兴趣的小伙伴们可以参考一下...2016-07-06
  • vivo X9如何查出后台偷跑流量应用?vivo X9查出后台偷跑流量应用的方法

    vivo X9如何查看后台流量偷跑的情况?小编教你轻松查到!还不了解的小伙伴快来看看吧! 1)打开手机自带的【i管家】应用,打开后点击【流量监控】选项。(如下图) 2)接着选...2016-12-31
  • PHP云存储Redis的应用场景与Redis实现排行榜功能

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本文我们来讲解Redis的应用场景实例。 C...2016-11-25
  • C#创建Windows服务的实现方法

    这篇文章主要介绍了C#创建Windows服务的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C# 启动 SQL Server 服务的实例

    下面小编就为大家分享一篇C# 启动 SQL Server 服务的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • PHP Libevent扩展安装配置及简单应用

    Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,下文我们就一起来看PHP Libevent扩展安装...2016-11-25
  • PHP explode()函数的几个应用和implode()函数有什么区别

    explode()函数介绍explode() 函数可以把字符串分割为数组。语法:explode(separator,string,limit)。 参数 描述 separator 必需。规定在哪里分割字符串。 string...2015-11-08
  • php中echo <<< 的应用

    <? $a="变量的值将被带入"; echo <<< help <pre> php中echo <<< 的应用 虽然echo "...";可以断行,但若其中如出现",则仍需做转义 处理。需写做: echo " ...2016-11-25
  • c#编写webservice服务引用实例分享

    c#编写webservice服务引用实例分享,大家参考使用吧...2020-06-25
  • C#使用windows服务开启应用程序的方法

    这篇文章主要介绍了C#使用windows服务开启应用程序的方法,实例分析了C#操作windows服务开启应用程序所遇到的问题及相关解决技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Springcloud RestTemplate服务调用代码实例

    这篇文章主要介绍了Springcloud RestTemplate服务调用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-20
  • PHP-GTK 介绍及其应用

    1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
  • Vue中keep-alive的两种应用方式

    这篇文章主要介绍了Vue中keep-alive的两种应用方式,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
  • ASP.NET Core如何注入多个服务实现类

    这篇文章主要介绍了ASP.NET Core如何注入多个服务实现类的相关资料,需要的朋友可以参考下面文章的具体内容...2021-09-22