PHP、Web 服务和 SOAP 介绍
本文将介绍如何从 PHP 脚本中访问企业应用
![](/icons/74881chengxu.gif)
![](/icons/74881dou2.gif)
您可能是
![](/icons/74881yi.gif)
位 PHP
![](/icons/74881chengxu.gif)
员
![](/icons/74881dou.gif)
需要为部门 Web 应用
![](/icons/74881chengxu.gif)
编写代码
![](/icons/74881dou.gif)
以便访问公司总部以 Web 服务方式提供
![](/icons/74881de.gif)
服务
![](/icons/74881dou2.gif)
您或许是
![](/icons/74881yi.gif)
位有经验
![](/icons/74881de.gif)
J2EE 开发人员
![](/icons/74881dou.gif)
希望多了解
![](/icons/74881yi.gif)
点 PHP 及其应用
![](/icons/74881dou2.gif)
本文中
![](/icons/74881de.gif)
例子是
![](/icons/74881yi.gif)
个运行在 IBM WebSphere? 应用
![](/icons/74881chengxu.gif)
服务器上
![](/icons/74881de.gif)
Enterprise JavaBean(EJB)
![](/icons/74881dou.gif)
但本文并没有讨论 Web 服务
![](/icons/74881de.gif)
部署
![](/icons/74881dou2.gif)
它
![](/icons/74881de.gif)
主要目标是介绍如何从 PHP 中使用 Web 服务
![](/icons/74881dou.gif)
这
![](/icons/74881yi.gif)
点可以应用于各种 Web 服务实现
![](/icons/74881dou2.gif)
什么是 PHP?
PHP:Hypertext Preprocessor(超文本预处理器
![](/icons/74881dou.gif)
PHP)是
![](/icons/74881yi.gif)
种流行
![](/icons/74881de.gif)
服务器端脚本语言
![](/icons/74881dou.gif)
用于创建动态 Web 内容
![](/icons/74881dou2.gif)
PHP 解释器为主流平台提供了源代码或者编译好
![](/icons/74881de.gif)
2进制文件
![](/icons/74881dou.gif)
这些平台包括大多数 Linux? 版本、Windows?、Mac OS X 和 iSeries?
![](/icons/74881dou2.gif)
确实有数百万台 Web 服务器正在运行 PHP
![](/icons/74881dou.gif)
其中大部分使用
![](/icons/74881de.gif)
是 PHP 4
![](/icons/74881dou2.gif)
2004 年 7 月推出
![](/icons/74881de.gif)
PHP 5 正在逐渐被采用
![](/icons/74881dou2.gif)
PHP 5 改进了对象模型
![](/icons/74881dou.gif)
底层
![](/icons/74881de.gif)
内存管理也从多线程和性能
![](/icons/74881de.gif)
角度重新作了设计
![](/icons/74881dou2.gif)
但是需要注意少数无法向后兼容
![](/icons/74881de.gif)
修改
![](/icons/74881dou.gif)
PHP 手册(请参阅参考资料)中对这些进行了记录
![](/icons/74881dou2.gif)
什么是 Web 服务技术?
Web 服务指
![](/icons/74881de.gif)
是自成体系
![](/icons/74881de.gif)
、模块化
![](/icons/74881de.gif)
应用
![](/icons/74881chengxu.gif)
![](/icons/74881dou.gif)
客户机和服务在这种应用
![](/icons/74881chengxu.gif)
中是松耦合
![](/icons/74881de.gif)
![](/icons/74881dou2.gif)
有关 Web 服务
![](/icons/74881de.gif)
详细信息
![](/icons/74881dou.gif)
请参阅参考资料中
![](/icons/74881de.gif)
链接
![](/icons/74881dou2.gif)
对于本文来说
![](/icons/74881dou.gif)
您只需要了解其中
![](/icons/74881de.gif)
主要技术:
SOAP(简单对象访问协议)定义了客户机和服务器的间传递
![](/icons/74881de.gif)
消息
![](/icons/74881dou2.gif)
消息采用 XML 格式
![](/icons/74881dou2.gif)
SOAP 独立于平台、编程语言、网络和传输层
![](/icons/74881dou2.gif)
本文将讨论 HTTP 上
![](/icons/74881de.gif)
SOAP
![](/icons/74881dou2.gif)
WSDL(Web 服务描述语言)是用于描述 Web 服务
![](/icons/74881de.gif)
基于 XML
![](/icons/74881de.gif)
语言
![](/icons/74881dou.gif)
描述内容包括服务
![](/icons/74881de.gif)
位置、格式、操作、参数和数据类型
![](/icons/74881dou2.gif)
UDDI(统
![](/icons/74881yi.gif)
描述、发现和集成)是用 API 和 UDDI Registry 实现来提供在网络上存储和检索 Web 服务信息
![](/icons/74881de.gif)
思路方法
本文包括 SOAP 消息和 WSDL 文档
![](/icons/74881de.gif)
![](/icons/74881yi.gif)
些例子
![](/icons/74881dou.gif)
但没有提供 UDDI
![](/icons/74881de.gif)
例子
![](/icons/74881dou2.gif)
XMethods 网站WebSite是
![](/icons/74881yi.gif)
个有用
![](/icons/74881de.gif)
Web 服务工具(请参阅参考资料)
![](/icons/74881dou.gif)
在那里可以找到在各种服务器平台上实现
![](/icons/74881de.gif)
可公开使用
![](/icons/74881de.gif)
Web 服务
![](/icons/74881de.gif)
列表
![](/icons/74881dou2.gif)
可以使用本文中
![](/icons/74881de.gif)
例子很方便地访问从 XMethods 中选择
![](/icons/74881de.gif)
服务
![](/icons/74881dou2.gif)
SOAP 和 PHP
有多种产品允许在 PHP 4 脚本中使用 SOAP
![](/icons/74881dou.gif)
最常见
![](/icons/74881de.gif)
产品是 PEAR::SOAP 和 NuSOAP
![](/icons/74881dou2.gif)
在写这篇文章
![](/icons/74881de.gif)
时候
![](/icons/74881dou.gif)
这些产品在和 PHP 5
![](/icons/74881de.gif)
兼容方面还存在问题
![](/icons/74881dou.gif)
估计很快就会升级
![](/icons/74881dou2.gif)
PHP 5 中新增了内置
![](/icons/74881de.gif)
SOAP 扩展
![](/icons/74881dou.gif)
我们称的为 ext/soap
![](/icons/74881dou2.gif)
它是作为 PHP
![](/icons/74881de.gif)
![](/icons/74881yi.gif)
部分提供
![](/icons/74881de.gif)
![](/icons/74881dou.gif)
因此不需要下载、安装和管理单独
![](/icons/74881de.gif)
包
![](/icons/74881dou2.gif)
这是第
![](/icons/74881yi.gif)
个用 C 而不是 PHP 为 PHP 编写
![](/icons/74881de.gif)
SOAP 实现
![](/icons/74881dou.gif)
因此作者声称它
![](/icons/74881de.gif)
速度要快得多
![](/icons/74881yinwei.gif)
新
![](/icons/74881de.gif)
扩展是 PHP
![](/icons/74881de.gif)
完整组成部分的
![](/icons/74881yi.gif)
![](/icons/74881dou.gif)
相关文档包含在 PHP 手册
![](/icons/74881de.gif)
Function Reference 部分(请参阅参考资料)
![](/icons/74881dou2.gif)
SOAP 参考是以
![](/icons/74881yi.gif)
个重要
![](/icons/74881de.gif)
免责声明开始
![](/icons/74881de.gif)
:
警告:该扩展是试验性
![](/icons/74881de.gif)
(EXPERIMENTAL)
![](/icons/74881dou2.gif)
本扩展
![](/icons/74881de.gif)
行为
![](/icons/74881dou.gif)
包括有关本扩展
![](/icons/74881de.gif)
![](/icons/74881hanshu.gif)
名和其他内容
![](/icons/74881dou.gif)
在以后
![](/icons/74881de.gif)
PHP 版本中随时可能改变
![](/icons/74881dou.gif)
不另行通知
![](/icons/74881dou2.gif)
使用该扩展
![](/icons/74881de.gif)
风险自负
![](/icons/74881dou2.gif)
警告看起来有点让人担心
![](/icons/74881dou.gif)
但实际上这个扩展似乎得到了很好
![](/icons/74881de.gif)
支持
![](/icons/74881dou2.gif)
和任何新代码
![](/icons/74881yi.gif)
样
![](/icons/74881dou.gif)
该扩展也存在缺陷
![](/icons/74881dou.gif)
但是报告
![](/icons/74881de.gif)
问题通常很快就能得到修正
![](/icons/74881dou2.gif)
在 PHP 站点上可以看到缺陷列表(请参阅参考资料)
![](/icons/74881dou2.gif)
我们估计
![](/icons/74881dou.gif)
在将来
![](/icons/74881de.gif)
PHP 版本中
![](/icons/74881dou.gif)
该扩展将从试验性功能转为主流功能
![](/icons/74881dou2.gif)
安装 PHP SOAP 扩展
应该在 Web 服务器上安装并运行 PHP 5
![](/icons/74881dou2.gif)
我们
![](/icons/74881de.gif)
实验采用 PHP 5.0.2
![](/icons/74881dou.gif)
这是现在最新
![](/icons/74881de.gif)
版本
![](/icons/74881dou.gif)
修正了 PHP 5
![](/icons/74881chushi.gif)
版本中
![](/icons/74881de.gif)
很多
![](/icons/74881cuowu.gif)
![](/icons/74881dou2.gif)
上面已经提到
![](/icons/74881dou.gif)
ext/soap 是作为 PHP 5
![](/icons/74881de.gif)
![](/icons/74881yi.gif)
部分提供
![](/icons/74881de.gif)
![](/icons/74881dou.gif)
因此不需要单独下载
![](/icons/74881dou.gif)
但是您可能需要对它做
![](/icons/74881yi.gif)
些修改来启用它
![](/icons/74881dou2.gif)
需要做哪些修改则取决于您是下载源代码
![](/icons/74881dou.gif)
自己编译 PHP
![](/icons/74881dou.gif)
还是直接下载 2进制文件
![](/icons/74881dou2.gif)
如果下载
![](/icons/74881de.gif)
是 PHP 源代码
![](/icons/74881dou.gif)
并在自己
![](/icons/74881de.gif)
平台上编译
![](/icons/74881dou.gif)
那么可能需要重新进行构建
![](/icons/74881dou.gif)
![](/icons/74881yinwei.gif)
在默认情况下没有启用 ext/soap
![](/icons/74881dou2.gif)
重复以前
![](/icons/74881de.gif)
构建过程
![](/icons/74881dou.gif)
并在 configure 命令中添加 --enable-soap 选项
![](/icons/74881dou2.gif)
如果下载
![](/icons/74881de.gif)
是预编译平台
![](/icons/74881de.gif)
2进制文件
![](/icons/74881dou.gif)
ext/soap 可能已经编译但没有加载
![](/icons/74881dou.gif)
因此需要更新 PHP 配置
![](/icons/74881dou.gif)
以便加载 ext/soap
![](/icons/74881dou2.gif)
编辑 php.ini 并找到 Dynamic Extensions 部分
![](/icons/74881dou.gif)
在这里增加
![](/icons/74881yi.gif)
行代码来自动加载该扩展
![](/icons/74881dou2.gif)
在 Windows 上
![](/icons/74881dou.gif)
这
![](/icons/74881yi.gif)
代码行是:
extension=php_soap.dll
在 UNIX 上是:
extension=php_soap.so
如果以前没有加载过任何可选
![](/icons/74881de.gif)
扩展
![](/icons/74881dou.gif)
可能还要设置 extension_dir 指令
![](/icons/74881dou.gif)
让它指向包含扩展库(其中包括 php_soap)
![](/icons/74881de.gif)
目录
![](/icons/74881dou.gif)
比如:
extension_dir="C:/php/ext/"(在 Windows 上使用正斜杠)
不要将目录信息放到 extension 指令中
![](/icons/74881dou.gif)
需要
![](/icons/74881de.gif)
话可以使用 extension_dir
![](/icons/74881dou2.gif)
对于 Windows
![](/icons/74881dou.gif)
可以下载其他两个 2进制包
![](/icons/74881dou2.gif)
Windows 安装
![](/icons/74881chengxu.gif)
包不含任何扩展
![](/icons/74881dou.gif)
因此要使用 Windows zip 压缩包
![](/icons/74881dou.gif)
这个压缩包中包含 ext/soap
![](/icons/74881dou2.gif)
注意
![](/icons/74881dou.gif)
ext/soap 依赖于 GNOME xml 库
![](/icons/74881dou.gif)
这个库必须使用 2.5.4 或更高版本
![](/icons/74881dou2.gif)
如果版本不够高
![](/icons/74881dou.gif)
可以从 xmlsoft(请参阅参考资料)安装 libxml2
![](/icons/74881dou2.gif)
最后
![](/icons/74881dou.gif)
ext/soap 在 php.ini 中有自己
![](/icons/74881de.gif)
配置部分
![](/icons/74881dou.gif)
在完成配置的后
![](/icons/74881dou.gif)
ext/soap 如下所示:
[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=1
; Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used
; instead of original _disibledevent="http://www.redbooks.ibm.com/redbooks/pdfs/sg246891.pdf">HTTP