PHP寫webservice服務端

來源:互聯網
上載者:User

標籤:log   發送請求   close   tty   soa   遠程   求和   hello   作業系統   

1) WebService技術介紹

WebService是一種跨程式設計語言和跨作業系統平台的遠程調用技術。僅僅有通過Web Service,client和server才可以自由的用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及其函數、參數和傳回值,它是WebServiceclient和server端都能理解的標準格式。

由於是基於XML的,所以WSDL及時機器可閱讀的。又是人可閱讀的。WSDL檔案儲存在Webserver上,通過一個url地址就能夠訪問到它。client要調用一個WebService服務之前,要知道該服務的WSDL檔案的地址。

WebService服務提供者能夠通過兩種方式來暴露它的WSDL檔案地址:1、注冊到UUIDserver,以便被人尋找;2、直接告訴給client調用者。

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 ” + 輸入的字串這個小功能,服務類非常easy,例如以下所看到的:

<?

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

PHP寫webservice服務端

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.