PHP中SOAP的分佈開發配置

php5以差將的形式提供SOAP服務,所以在編譯時,需要加入--enable-soap選項。使用phpinfo輸出信息時,如果存在SOAP選項,表示服務已經生效,如圖所示

如果服務沒有開啟,需要在PHP配置文件中開啟,如以下代碼所示

;extension=php_snmp.dll

extension=php_soap.dll

SOAP有自己的配置選項,如以下代碼所示

其中選項soap.wsdl_cache_enabled表示是否關閉WSDL數據緩存,值為1時禁用緩存,為了方便程序調試,在開發階段建議將該項設置為1;soap.wsdl_cache_dir表示緩存存放目錄,windows系統可以設置為c:\tmp;soap.wsdl_cache_ttl表示緩存生命周期,以秒為單位,默認86400;soap.wsdl_cache_limit表示緩存數據大小,以MB為單位。

Advertisements

配置文件修改後,重啟PHP服務或者php_fpm,即可生效。如果PHP運行於非安全模式下,上述配置項可以直接在PHP代碼中使用ini_set設置,例如關閉WSDL緩存功能,如以下代碼所示

ini_set("soap.wsdl_cache_enabled","1");

前面提到過PHP 既可以作為SOAP的客戶端,也可以作為服務端。作為服務端時,使用SoapServer實例類初始化SOAP服務,如以下代碼所示

$server = newSoapServer('./wsdl/UserDataSoap.wsdl',array('soap_version' =>SOAP_1_2));

其中參數1表示SOA服務描述文件,即WSDL文件,該文件是SOAP通信的核心;參數2表示SOAP協議版本,常用的版本有1.0及1.2,本文內容及實例全部基於SOAP1.2版本實現。

Advertisements

得到SoapServer實例對象,就可以調用對象中setClass方法設置WSDL所描述的消息服務。通常情況下,需要將setClass指定實例類描述為可公開調用的服務介面。假設需要將User類描述為WSDL服務介面,代碼如下所示

user.php類文件代碼如下所示

所有作為公開調用的服務介面,成員類方法必須修飾為public許可權。

當PHP作為客戶端模式,使用SoapClient實例類。假設需要調用前面創建的user服務代碼所示

在實際應用開發時,WSDL文件可以是遠程的文件,並且支持跨域訪問。可以看到,PHP在調用SOAP服務時,開發人員不需要編寫任何處理WSDL或者XML文件的過程,只需要像本地開發一樣調用對象中的方法即可。

Advertisements

你可能會喜歡