PHP中Soap模块安装与使用例子
pHP的SOAP扩展可以用来提供和使用Web services。换句话说,PHP开发者可以利用这个PHP扩展来写他们自己的Web services,也可以写一些客户端来使用给定的Web services。
PHP5中的这个SOAP扩展目的是为了实现PHP对Web services的支持。与其它实现PHP对Web services的支持的方法不同,SOAP扩展是用C写的,因此它比其它方法具有速度优势
SOAP扩展支持以下规范。
* SOAP 1.1
* SOAP 1.2
* WSDL 1.1
SOAP扩展主要用来处理RPC形式的Web services。不过,你也可以使用文本形式的WSDL文件配合WSDL模式的服务端和客户端。
一、Linux下安装soap模块
安装完php后最好保留当时安装的文件,比如usr/local/php-5.3.2
查看soap模块是否安装的办法:在php的安装目录下运行php -m来查看
如:
/usr/local/php/bin/php -m |grep 'soap'
如果没有安装,则进入php的安装源文件夹
cd php-5.3.2/ext/soap
进入后在此运行phpize命令
/usr/local/php/bin/phpize
查看信息是否有出错,没有出错的话运行如下命令:
./configure -with-php-config=/usr/local/php/bin/php-config -enable-soap
然后是安装编译
make
最后是安装
make install
安装好之后会提示soap.so文件的保存路径
编译后的soap.so文件保存在了/usr/local/php/lib/php/extensions/no-debug-non-zts-20111222目录下,接着修改php.ini文件
手工修改:查找/usr/local/php/etc/php.ini中的extension_dir = "./",默认是注释掉的
修改为extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20111222/"
并在此行后增加如下,然后保存:
extension = "soap.so"
重新启动apache,在运行php -m就已经能看到扩展的soap模块了。
如果还要安装扩展别的模块可以以此类推。
二、Windows下安装soap模块
在Windows下可以通过修改php.ini来选择当PHP启动时加载哪些扩展库。也可以在脚本中通过使用 dl()来动态加载。PHP扩展库的DLL文件都具有php_前缀。很多扩展库都内置于Windows版的PHP之中。这意味着要加载这些扩展库不需要额外的DLL文件和extension配置指令。Windows下的PHP扩展库列表列出了需要或曾经需要额外PHP DLL文件的扩展库。
要在php.ini中启用某扩展库,需要去掉该行extension=php_*.dll前的注释符号,将想要加载的扩展库前的分号(;)删除即可。
启用php_soap.dll扩展库
// 将这一行 ;extension=php_soap.dll // 改成这样 extension=php_soap.dll
Note: 如果运行服务器模块版的PHP,在修改了php.ini之后别忘了重新启动web服务器以使其改动生效。
下面是内置的扩展库列表:
php_bz2.dll bzip2压缩函数库 php_calendar.dll 历法转换函数库 php_crack.dll 密码破解函数库 php_ctype.dll ctype家族函数库 php_curl.dll CURL,客户端URL库函数库 php_dba.dll DBA:数据库(dbm 风格)抽象层函数库 php_dbase.dll dBase函数库 php_dbx.dll dbx函数库 php_domxml.dll DOM XML函数库 php_dotnet.dll .NET函数库 php_exif.dll EXIF函数库 php_fbsql.dll FrontBase函数库 php_fdf.dll FDF:表单数据格式化函数库 php_filepro.dll filePro函数库 php_ftp.dll FTP函数库 php_gd.dll GD库图像函数库 php_gd2.dll GD库图像函数库 php_gettext.dll Gettext函数库 php_hyperwave.dll HyperWave函数库 php_iconv.dll ICONV字符集转换 php_ifx.dll Informix函数库 php_iisfunc.dll IIS 管理函数库 php_imap.dll IMAP,POP3 和 NNTP 函数库 php_ingres.dll Ingres II函数库 php_interbase.dll InterBasefunctions php_java.dll Java函数库 php_ldap.dll LDAP函数库 php_mbstring.dll 多字节字符串函数库 php_mcrypt.dll Mcrypt 加密函数库 php_mhash.dll Mhash函数库 php_mime_magic.dll Mimetype函数库 php_ming.dll Ming函数库(Flash) php_msql.dll mSQL函数库 php_mssql.dll MSSQL函数库 php_mysql.dll MySQL函数库 php_mysqli.dll MySQLi函数库 php_oci8.dll Oracle 8函数库 php_openssl.dll OpenSSL函数库 php_overload.dll 对象重载函数库 php_pdf.dll PDF函数库 php_pgsql.dll PostgreSQL函数库 php_printer.dll 打印机函数库 php_shmop.dll 共享内存函数库 php_snmp.dll SNMP函数库 php_soap.dll SOAP函数库 php_sockets.dll Socket函数库 php_sybase_ct.dll Sybase函数库 php_tidy.dll Tidy函数库 php_tokenizer.dll Tokenizer函数库 php_w32api.dll W32api函数库 php_xmlrpc.dll XML-RPC函数库 php_xslt.dll XSLT函数库 php_yaz.dll YAZ函数库 php_zip.dll Zip文件函数库 php_zlib.dll ZLib压缩函数库
SOAP模块的使用方法
首先我们来了解一下SOAP扩展的三个主要对象:
1.SoapServer
SoapServer用于创建php服务器端页面时定义可被调用的函数及返回响应数据。创建一个NON-WSDL模式的SoapServer对象的语法格式如下:
$soap = new SoapServer(null,$arr);
$arr是SoapServer的属性信息,是一个数组。
SoapServer对象的addFunction方法是用来声明哪个函数可以被客户端调用,使用方法如下:
$soap->addFunction($functionName);
$functionName是允许客户端调用的方法名称。如果所有的方法都允许调用,可使用下面的方法:
$soap->addFunction(SOAP_FUNCTIONS_ALL);
SoapServer对象的handle方法用来处理用户输入并调用相应的函数,最后返回给客户端处理的结果。使用方法如下:
$soap->handle([$soapRequest]);
$soapRequest是一个可选参数,用来表示用户的请求信息。如果不指定$soapRequest,则表示服务器将接收用户的全部请求。
2.SoapClient
SoapClient用于调用远程服务器上的SoapServer页面,并实现了对相应函数的调用,创建一个SoapClient对象的方法如下:
$client = new SoapClient(null,$arr);
其中,参数$arr与SoapServer相同。穿件SoapClient对象后,调用服务器端的方法如下:
$client->functionName($p);
functionName()为服务器端待调用的函数名,$p 为参数。
3.SoapFault
SoapFault用于生成soap访问过程中可能出现的错误。创建一个SoapFault对象的方法为:
$fault = new SoapFault($code,$msg);
参数$code为用户定义的错误代码,$msg为用户定义的错误信息。soapFault对象会在服务器端页面出现错误时自动生成,或者通过用户自行创建SoapFault对象时生成。对于Soap访问时出现的错误,客户端可通过捕捉SoapFalut对象来获得相应的错误信息。在客户端捕获SoapFault对象后,可以通过下面的代码获得错误代码和错误信息:
$fault->code; //错误代码 $fault->msg; //错误信息
以上就是PHP SOAP模块主要的三个对象介绍,下面我们通过一个简单的实例,帮助大家理解一下soap模块的使用方法。
4.PHP SOAP实例(NON-WSDL模式)
服务器(server)端代码server.php:
<?php $arr = array( 'location' => 'http://192.168.187.132/server.php', 'uri' => 'http://192.168.187.132/' ); $soap = new SoapServer(null, $arr); $soap->addFunction(SOAP_FUNCTIONS_ALL); //允许客户端调用所有的方法 $soap->handle(); function a() { return '李坏博客'; } function b($b) { return $b; } ?>
客户端(client)代码:
<?php $arr = array( 'location' => 'http://192.168.187.132/server.php', 'uri' => 'http://192.168.187.132/' ); $soap = new SoapClient(null, $arr); echo $soap->a() , '<br />'; echo $soap->b('b'); ?>
本文地址:http://www.phprm.com/code/60079.html
转载随意,但请附上文章地址:-)