日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP的SOAP原理及实现

發布時間:2024/9/20 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP的SOAP原理及实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 簡介:

SOAP : (全稱Simple Object Access Protocol) 為交換數據的一種協議規范,該通信協議位于HTTP之上,以XML格式語言進行數據互換,使用場景:如果各項目之間使用不用的開發語言要進行數據互換,就需要一個互相都能通信的工具,WSDL,SOAP為此誕生

?

WSDL:?WSDL 指網絡服務描述語言 (Web Services Description Language),WSDL 是一種使用 XML 編寫的文檔。這種文檔可描述某個 Web service。它可規定服務的位置,以及此服務提供的操作(或方法)。

?

2. 配置:

PHP的SOAP擴展開啟及配置

WIn環境

打開PHP.ini ??extension=php_soap.dll去掉前面的分號

Linux環境

編譯時加上 ??--enable-soap

?

?

WSDL緩存類型 1為磁盤 ? 2為內存

soap.wsdl_cache = 1

緩存文件保存位置

soap.wsdl_cache_dir = /tmp

開啟或關閉WSDL緩存功能,由于每次進行SOAP都會有下載對方XML文檔的過程,也是其效率低下的原因

soap.wsdl_cache_enabled =1

緩存文件的最大數量

soap.wsdl_cache_limit

緩存文件生存時間

soap.wsdl_cache_ttl = 3600

?

3. 應用實例:

a. 不使用wsdl的情況

服務端:

  • <span style="font-size:18px;"><?php

  • class testclass{

  • ?
  • public function getName($name)

  • {

  • return "hello ".$name;

  • }

  • }

  • ?
  • ?
  • function getName($name)

  • {

  • return "hello ".$name;

  • }

  • ?
  • $a = new SoapServer(null,array("uri"=>"index.php"));

  • $a->setClass("testclass"); //指定一個類中的所有方法

  • //$a->addFunction("test"); //指定單個方法

  • $a->handle(); //處理訪問</span>

  • ?

    ?

    uri為必填項,客戶端的uri必須和服務端的保持一致

    客戶端

    ?

  • <span style="font-size:18px;">try{

  • $client = new SoapClient(null, array("location"=>"http://localhost/instance/index.php","uri"=>"index.php"));

  • //echo $client->getName("getName"); //調用方法

  • echo $client->__soapCall ("getName",array("name")); //調用方法

  • ?
  • }catch(Exception $e){

  • print_r($e->getMessage(),true);

  • }</span>

  • ?

    location為SOAP服務端訪問地址,uri與服務端保持一致

    ?

    b. 使用WSDL方法

    因使用wsdl之前需要手動生成xml文件,手寫的話太過繁瑣,可使用SoapDiscovery.class.php 開源類生成

    下載地址?

    ?

  • <span style="font-size:18px;"><?php

  • class testclass{

  • ?
  • public function getName($name)

  • {

  • return "hello ".$name;

  • }

  • }

  • ?
  • include_once "SoapDiscovery.class.php";

  • ?
  • $discovery = new SoapDiscovery("testclass","testclass");

  • $filename = $discovery->getWSDL(); //生成XML文件

  • echo $filename;</span>

  • 服務端

    ?

    ?

  • <span style="font-size:18px;">$a = new SoapServer("testclass.wsdl");

  • $a->setClass("testclass"); //指定一個類中的所有方法

  • $a->handle(); //處理訪問 </span>

  • 客戶端

    ?

    ?

  • <span style="font-size:18px;">try{

  • $client = new SoapClient("http://localhost/instance/index.php?wsdl");

  • //echo <span style="font-family:Arial,Helvetica,sans-serif">$client</span>->getName("getName");

  • //echo <span style="font-family:Arial,Helvetica,sans-serif">$client</span><span style="font-family:Arial,Helvetica,sans-serif">->__soapCall ("getName",array("name"));</span>

  • print_r(<span style="font-family:Arial,Helvetica,sans-serif">$client</span><span style="font-family:Arial,Helvetica,sans-serif">->__getFunctions()); //打印服務端所有提供的方法</span></span>

  • <span style="font-size:18px;">}catch(Exception $e){

  • print_r($e->getMessage(),true);

  • }</span>

  • ?

    ?

    擴展類所提供的方法可參考PHP Manual

    來源:https://blog.csdn.net/marvinblog/article/details/14163557

    總結

    以上是生活随笔為你收集整理的PHP的SOAP原理及实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。