PHP寫webservice服務端,webservice服務端

來源:互聯網
上載者:User

PHP寫webservice服務端,webservice服務端
1) WebService技術介紹

WebService是一種跨程式設計語言和跨作業系統平台的遠程調用技術。只有通過Web Service,用戶端和伺服器才能夠自由的用HTTP進行通訊,不論兩個程式的平台和變成語言是什麼。

XML、SOAP和WSDL是Web Service平台的三大技術:

WebService採用HTTP協議傳輸資料,採用XML格式封裝資料,即XML中說明調用遠程服務物件的哪個方法、傳遞的參數是什麼、以及服務物件的返回結果是什麼。XML是WebService平台中表示資料的格式,除了易於建立和易於分析外,XML主要的有點在於它既是平台無關的,又是廠商無關的。

SOAP,WebService通過HTTP協議發送請求和接收結果時,發送的請求內容和結果內容都採用XML格式封裝,並增加了一些特定的HTTP訊息頭,以說明HTTP訊息的內容格式,這些特定的HTTP訊息頭和XML內容格式就是SOAP協議,SOAP提供了標準的RPC方法來調用Web Service。SOAP協議 = HTTP協議 + XML資料格式。

WSDL(Web Service Description Language)是基於XML的語言,用於描述Web Service及其函數、參數和返回值,它是WebService用戶端和伺服器端都能理解的標準格式。因為是基於XML的,所以WSDL及時機器可閱讀的,又是人可閱讀的。WSDL檔案儲存在Web伺服器上,通過一個url地址就可以訪問到它。用戶端要調用一個WebService服務之前,要知道該服務的WSDL檔案的地址。WebService服務提供者可以通過兩種方式來暴露它的WSDL檔案地址:1、註冊到UUID伺服器,以便被人尋找;2、直接告訴給用戶端調用者。

2) Apache相關配置

為了能夠實現Web Service,httpd必須支援soap的擴充,這裡以yum安裝httpd及soap擴充為例進行說明:

1> 安裝httpd

   yum install httpd

2> 安裝php

   yum install php

3> 配置httpd支援php解析

   在/etc/httpd/conf/httpd.conf中添加如下:

   AddType application/x-httpd-php .php

   AddType application/x-httpd-php-source .phps

4> 重新啟動httpd

   service httpd restart

5> 檢查是否安裝了soap擴充

   /usr/bin/php -m | grep soap  //! 如果存在則說明已經安裝了soap擴充,如果不存在,執行下一步

6> 安裝soap擴充

   yum install php-soap //! 安裝完之後再次檢查,重啟httpd

7> 驗證soap擴充是否正確安裝

   既可以通過php -m | grep soap的方式,也可以通過phpinfo();的方式。

3) PHP實現WebService服務端

1> 定義服務類——Service.php

該服務端就是實現你想要對外提供的介面,假設我們需要對外提供一個函數,它接收一個字串,然後返回”Hello ” + 輸入的字串這個小功能,服務類很簡單,如下所示:

<?php   class Service   {public function sayHello($content){      return "Hello ".$content;}   }?>

2> 產生wsdl檔案——create_wsdl.php

    為了產生wsdl檔案,我們可以使用網上提供的SoapDiscovery.class.php中的getWSDL提供的方法來實現,該SoapDiscovery.class.php的代碼在網上可以下載到,為了組建檔案,我們需要修改getWSDL方法中的部分代碼(加上寫檔案的代碼),如下所示:

//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');//!注釋掉return,添加如下代碼,目的是為了調用getWSDL產生.wsdl檔案$fso = fopen($this->class_name.".wsdl", "w");fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>'));                        fclose($fso);

現在我們就可以定義自己的create_wsdl.php了,只需要調用一下這個方法即可,如下:

<?php include("Service.php");include("SoapDiscovery.class.php");//! 第一個參數是類名,產生的wsdl檔案就是以它來命名的;第二個參數是服務的名稱,可以隨便寫$disco = new SoapDiscovery('Service', 'soap');$disco->getWSDL();?>

3> 修改服務端——Service.php

修改Service.php,添加一些代碼,如下所示:

<?php   class Service   {public function sayHello($content){      return "Hello ".$content;}   }     $service = new SoapServer('http://192.168.17.129/soap/Service.wsdl', array('soap_version' => SOAP_1_2));   $service->setClass("Service"); //! 註冊Service類的所有方法   $service->handle(); //! 處理請求?>

4> 修改Service.wsdl檔案

  

5> 用戶端測試——client.php

client.php用來測試我們剛寫的Web Server的服務端能否可用,代碼如下:

<?php   $soap = new SoapClient('http://192.168.17.129/soap/Service.php?wsdl');     echo $soap->sayHello("houqd2012");?>

輸出結果如下:

Hello houqd2012

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.