开启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
總結
以上是生活随笔為你收集整理的开启php soap,php soap 开发文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 405跳转,php – 返回HT
- 下一篇: php 取utc时间,得到UTC时间在P