首頁 後端開發 php教程 關於php中webservice實作的簡單架構

關於php中webservice實作的簡單架構

Jun 21, 2018 pm 03:04 PM
php webservice

這篇文章主要介紹了四種php中webservice實作的簡單架構方法及實例,需要的朋友可以參考下

一:PHP本身的SOAP
所有的webservice都包含服務端(server)和客戶端(client)。
要使用php本身的soap先把該拓展安裝好並且啟用。下面看具體的code
首先這是服務端實作:

<?php   
class test   
{   
    function show()   
    {   
        return &#39;the data you request!&#39;;   
    }   
}   
function getUserInfo($name)   
{   
    return &#39;fbbin&#39;;   
}   
//实例化的参数手册上面有,这个是没有使用wsdl的,所以第一个参数为null,如果有使用wsdl,那么第一个参数就是这个wsdl文件的地址。   
$server = new SoapServer(null, array(&#39;uri&#39; =&#39;http://soap/&#39;,&#39;location&#39;=&#39;http://localhost/test/server.php&#39;));   
$server->setClass(&#39;test&#39;);   
//$server->addFunction(&#39;getUserInfo&#39;);   
$server->handle();   
?>
登入後複製

然後是客戶端

$soap = new SoapClient(null, array(&#39;location&#39;=&#39;http://localhost/test/server.php&#39;,&#39;uri&#39; =&#39;http://soap/&#39;));     
echo $soap->show();   
//得到:&#39;the data you request!&#39;   
//echo $soap->getUserInfo(&#39;sss&#39;);
登入後複製

就這麼簡單,當時這只是一個很簡單的例子,其實很多的通信機制都是這樣去實現的!
/////////////////////////////////////////////// /////////////////////////////////

二:PHPRPC
先到官網(http ://www.phprpc.org/zh_CN/ )上面去下載最新版的phprpc,解壓縮之後會有相關的文件,我們把文件進行劃分(服務端和客戶端文件)如下:
服務端文件:

dhparams   
dhparams.php   
phprpc_server.php   
bigint.php   
compat.php   
phprpc_date.php   
xxtea.php
登入後複製

客戶端檔案:

phprpc_client.php   
bigint.php   
compat.php   
phprpc_date.php   
xxtea.php
登入後複製

我們把服務端檔案放在服務端資料夾中,然後把客戶端檔案放在客戶端資料夾中,之後再服務端資料夾中新建個檔案(server.php)作為服務,然後再客戶端新建個檔案(client.php)作為客戶端,各自程式碼如下:
server端:

<?php   
include_once"phprpc_server.php"; //加载phprpc文件   
$server = new PHPRPC_Server();   
$server->add(&#39;getUser&#39;);   
$server->setDebugMode(true);   
$server->start();   
function getUser( )   
{   
    return ‘the data you request!&#39;;   
}
登入後複製

client端:  

[code]   
<?php   
include_once "phprpc_client.php";   
$client = new PHPRPC_Client(&#39;http://127.0.0.1/phpservice/phprpcserver/server.php&#39;);   
$data = $client->getUser();   
var_dump($data);   
//得到:the data you request!
登入後複製

這上面提到wsdl之後會講到如何產生。
/////////////////////////////////////////////// /////////////////////////////////

三:開源的NUSOAP
首先到網路上去下載最新版的nusoap,現在的最新版本是0.9.5的,解壓縮之後會得到一個lib資料夾,把這個檔案分別放到服務端和客戶端各一份,然後再服務端和客戶端分別建立server.php和client.php文件,作為通訊文件。
服務端檔案如下:

<?php   
ini_set("soap.wsdl_cache_enabled", 0);//关闭缓存   
require_once("lib/nusoap.php"); //加载nusoap文件   
$server = new soap_server;   
$server->configureWSDL(&#39;nusoasp&#39;);//设定服务的名称,使用的wsdl来通信,如果不适用wsdl将会更简单,网上有很多的例子   
$server->register(&#39;getUserInfo&#39;, array(&#39;name&#39;="xsd:string", &#39;email&#39;="xsd:string"), array(&#39;return&#39;="xsd:string"));   
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : &#39;&#39;;   
$server->service( $HTTP_RAW_POST_DATA );   
function getUserInfo($name, $email)   
{   
    return ‘the data you request!&#39;;   
}
登入後複製

客戶端檔案如下:

require_once("lib/nusoap.php");   
$client = new soapclient(&#39;http://localhost/phpservice/nusoapserver/server.php?wsdl&#39;);   
$pagram = array(&#39;fbbin&#39;, &#39;fbbin@foxmail.com&#39;);   
$string = $client->call(&#39;getUserInfo&#39;, $pagram);   
//得到:the data you request!
登入後複製

//////////////////////// ////////////////////////////////////////////////// //////

四:HessianPHP
hessian其實我個人認為他不是一個webservice,只能說是類似而已。因為它不具備webservice的那些特性。它支援的語言比較多我們現在只需要研究php版本的HessianPHP就行了,下載最新版本是v2.0.3的,解壓縮之後會得到一個src的目錄,這個目錄使我們需要使用的一個核心資料夾。
我們把名字重新命名為HessianPHP然後分別分別放到server和client端,然後分別建立server.php和client.php檔案。
server端:

<?php   
include_once &#39;HessianPHP/HessianService.php&#39;;//加载核心文件   
class TestService   
{   
    public function __construct()   
    {   
  
    }   
  
    public function add($numa, $numb)   
    {   
        return $numa + $numb;   
    }   
  
    public function check()   
    {   
        return &#39;fbbiin@gmail.com&#39;;   
    }   
}   
$test = new TestService();   
$hessian = new HessianService( $test, array(&#39;displayInfo&#39; => true) );   
$hessian->handle();//注意这里不是网上的$hessian->service(),可能是版本不一样,改了吧!我也是看了源码才知道!   
?>
登入後複製

client 端:

<?php   
include_once &#39;HessianPHP/HessianClient.php&#39;;   
$url = "http://localhost/phpservice/hessianserver/server.php";   
$options = new HessianOptions();   
$client = new HessianClient( $url, $options );   
$num = $client->add( 3, 5 );   
echo $num;//得到:8;   
echo $client->check();//得到:fbbiin@gmail.com;
登入後複製

以上四種方式為web開發過程中常用到的webservice通訊方式。用的最多的是nusoap,個人覺得phprpc其實也不錯,這個在性能上面和nusoap基本上差不多,只不過,phprpc在商業上是收費的。還有個hessianPHP好像是用java的,採用的二進位方式傳輸資料流,其實也是各有千秋啊。更多的詳細資料去找百度和谷歌吧。
下面說下產生wsdl檔。
我們在webservice上面進行通信用的最多的和相對來說比較安全的就是使用wsdl了,這種文件可以自己書寫,但是不是一定的大牛好像寫不出來啊,因此我們需要藉助一個工具zend studio來產生wsdl檔。
下面我們就來產生WSDL檔案了,File->New—>Other—>Web Service—>WSDL,這樣就可以新建一個WSDL檔案了,如圖。


然後我們就來修改WSDL文件,zeng studio為我們提供了可視化的操作,當然如果你牛的話,你當然是可以改文件代碼的,其實也就幾個東西, 弄懂了的話也不會太難。


做完這一步,這個WSDL檔案就基本上可用了,但又兩個問題需要注意:
做到這一步,有可能會測試失敗,可能會因為沒有進行binding,這個東西有時是需要手動來完成的,在binding上右鍵選擇Generate Binding Content(就是兩個大框中間那個小框)就行了。
第二個要注意的是php的WSDL緩存,在做測試時,一般要將WSDL緩存關閉,否則你使用的有可能是原來的WSDL文件,而不是更新過的。關閉快取有兩種方法,第一種就是直接到php.ini設定soap.wsdl_cache_enabled = 0;第二種就是在php檔案中加入一條語句,ini_set("soap.wsdl_cache_enabled", "0");
做到這裡,你就可以放心地測試,呼叫你的server程式了。
說完了,OK!

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關建議:

關於php自訂的格式化時間

#關於php中使用exec,system等函數呼叫系統指令的方法

#

以上是關於php中webservice實作的簡單架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

See all articles