今天看書,發現了PHPRPC這個好東東,故在此寫下來以作筆記。

PHPRPC 是一個輕型的、安全的、跨網際的、跨語言的、跨平臺的、跨環境的、跨域的、支援複雜物件傳輸的、支援引用引數傳遞的、支援內容輸出重定向的、支援分級錯誤處理的、支援會話的、面向服務的高效能遠端過程呼叫協議。

下載地址:http://www.phprpc.org/zh_CN/download/ 該版本直接解壓後就可以使用,其中bigint.php、compat.php、phprpc_date.php、xxtea.php屬於公共檔案。不論是客戶端還是伺服器端都需要這些檔案。 

phprpc_client.php是客戶端檔案,如果你只需要使用客戶端,那麼只要有上面那些公共檔案和這個檔案就可以使用了,使用時,直接在你的程式中包含 phprpc_client.php 就可以,公共檔案不需要單獨包含。 

         dhparams 、dhparams.php phprpc_server.php 這三個檔案是伺服器端需要的檔案。 其中 dhparams 目錄中包含的是加密傳輸時用來生成金鑰的引數 。dhparams.php 是用來讀取 dhparams 目錄中檔案的類。 phprpc_server.php 是伺服器端,如果你要使用 PHP 來發布 PHPRPC 服務,只需要包含這個檔案就可以了。公共檔案和 dhparams.php 都不需要單獨包含。 

       PHP 4.3+、PHP 5、PHP 6 

       客戶端要求開啟 socket 擴充套件。 

         伺服器端需要有 IIS、Apache、lighttpd 等可以執行 PHP 程式的 Web 伺服器。 

        如果伺服器端需要加密傳輸的能力,必須要保證 session 配置正確。

示例:

伺服器端:

<?php 
include("phprpc/phprpc_server.php");
class Hello {
static function HelloWorld()
{
return 'hello  world!';
}
}
$server = new phprpc_server();
$server->add('HelloWorld','hello');
$server->start();

?>

客戶端:

<?php
include("phprpc/phprpc_client.php");

//這裡的URL是伺服器端的地址
$client = new phprpc_client("http://127.0.0.1/immoc/phprpc_server.php");
echo $client->HelloWorld();

?>

執行之後,出現了Fatal error: Cannot redeclare gzdecode() in D:\wamp\www\immoc\phprpc\compat.php on line 182

報錯。

出現這個問題的原因是:php在5.4版本後,已經自包含了gzdecode()函式,開發者自己定義的gzdecode()函式會與其衝突。

知道了錯誤的原因,解決起來也就很方便了。在 ....\phpRPC\compat.php檔案的第72行(這裡,可能有所不同),找到function gzdecode($data, &$filename = '', &$error = '', $maxlength = null) ,把這個函式用下面的程式碼包括起來:

if (! function_exists('gzdecode')) {

    //將gzdecode函式包括進來

 }

。這樣做了之後,再次執行程式,得到了我們想要的結果: