开启php soap,php soap 开发文档
一. 必備知識
1.wsdl(web服務(wù)標(biāo)記語言)
WSDL(網(wǎng)絡(luò)服務(wù)描述語言,Web Services Description Language)是一門基于 XML 的語言,用于描述 Web Services 以及如何對它們進(jìn)行訪問。
具體參考請訪問下面網(wǎng)址
2.soap
SOAP 是一種簡單的基于 XML 的協(xié)議,它使應(yīng)用程序通過 HTTP 來交換信息。
具體參考請訪問下面網(wǎng)址
3.php擴(kuò)展
具體參考請訪問下面網(wǎng)址
二. php soap開發(fā)模式
1. working in swdl mode(契約先行(Contract first)模式)
契約先行模式使用了一個用XML定義的服務(wù)接口的WSDL文件。WSDL文件定義了服務(wù)必須實(shí)現(xiàn)或客戶端必須使用的接口。SoapServer和SoapClient的WSDL模式就基于這個概念。也就是用soap通訊的時候必須先有一個定義過的服務(wù)接口,才能進(jìn)行通訊。
2. working in non-swdl mode(代碼先行(Code first)模式)
在代碼先行模式中,首先要先寫出實(shí)現(xiàn)服務(wù)的代碼。然后在大多數(shù)情況下,代碼會產(chǎn)生一個契約,換種說法,一個WSDL。接著客戶端在使用服務(wù)的時候就可以使用那個WSDL來獲得服務(wù)的接口。盡管如此,PHP5的擴(kuò)展并沒有從代碼輸出一個WSDL的規(guī)定,考慮到這種情況,可以在non-WSDL模式下使用 SoapServer和SoapClient。也就是說在soap通訊的時候并不需要一個預(yù)先定義過的服務(wù)接口,代碼會自動的產(chǎn)生。
三.參考例子:
下面介紹如何使用WSDL模式和non-WSDL模式來實(shí)現(xiàn)服務(wù)和客戶端。相對而言,使用WSDL模式來實(shí)現(xiàn)服務(wù)和客戶端會比較容易。
1. noWSDL模式實(shí)現(xiàn)
服務(wù)端 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模式實(shí)現(xiàn)
第一步:編寫服務(wù)端類文件
class..php
class test
{
/**
*
* @return string
*/
function show()
{
return 'hello world!';
}
}
?>
第二步:將類文件生成 wsdl文件server.wsdl。
由于wsdl文件編寫比較復(fù)雜,所以我們用第三方工具生成。我們以zend studio為例子演示:
Tools ==> WSDL Generator ==> Configration name : test; WSDL file name: server
==>NEXT ==> 點(diǎn)擊 + ==> 選擇上面的創(chuàng)建的class.php ==> 這時候會看到一個 classes?? : URL Location的映射,保留 test類前面的勾,并將其url 設(shè)置為 SOAP Server的url:http://soapserver_url/server.php ==>點(diǎn)擊Finish,ZDE就會創(chuàng)建一個非常漂亮的WSDL了?? 工作基本上完成了.
第三步:服務(wù)端編寫:
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服務(wù)編寫,已經(jīng)可以滿足大部分需要。如果需要更加高級的功能請參考其他方面的資料。
三. 出現(xiàn)的問題。
1.在方法中對屬性的賦值在其他方法中不起作用。
比如在客戶端調(diào)用服務(wù)端某個方法對某個屬性賦值。
在其他方法里就不能用。但在 __construct 方法中對屬性的賦值是可以個在其他方法中使用的。
2. 提示 Client] looks like we got no XML document錯誤。
服務(wù)器端文件在<?php ?> 標(biāo)簽前后都不要有任何數(shù)據(jù)包括空格,空行。
3. Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity
原因如下:PHP程序作為 SOAP客戶端 采用 WSDL 模式訪問遠(yuǎn)端服務(wù)器的時候,PHP是通過調(diào)用 libcurl 實(shí)現(xiàn)的。至少在 PHP5.2.X 是這樣的。如果采用 non-WSDL 模式,就不需要 libcurl。在solaris 沒有缺省安裝 libcurl,也許是我沒有安裝。除了 了ibcurl以外,至少還關(guān)聯(lián)的庫包括:
libidn,ibgcc,libiconv,libintl,openssl
總結(jié)
以上是生活随笔為你收集整理的开启php soap,php soap 开发文档的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 405跳转,php – 返回HT
- 下一篇: java调用jndi出错,无法使用Jav