最近在開發ios應用,要開發ios應用,當然要用到伺服器,用伺服器必然要選用遠端呼叫協議,因為之前本人一直都是用php開發的,所以選用thinkphp當框架的apache伺服器.
至於遠端呼叫協議,經過思考,還是選用jsonrpc吧,比較簡單方便,翻了一下thinkphp(是3.2版本)的手冊,發現thinkphp還是支援jsonrpc的,這不錯啊,不用自己去寫了(當然自己寫寫也不是什麼麻煩的事).
簡單地,用thinkphp做客戶端,去呼叫thinkphp伺服器端的介面,好用.
接下來是android端,qiappzvg**隨便去網上找了個包(android-json-rpc.jar),呼叫一下介面,誒!也好用,進展很順利.
接下來就換ios了,取github上找了個objc-jsonrpc的專案,拿來呼叫介面,不好用,很正常,可能是我找的專案有問題,於是我又換了乙個demiurgic-json-rpc,還是不好用,我開始對程式產生了懷疑,因為web端和android端呼叫都沒問題,所以我把焦點定位到了我的ios程式,我的天,花了我半天時間,我硬www.cppcns.com是沒找出問題,我還用ios端呼叫了其他人提供的jsp客戶端的介面,也沒問題啊.
後來,我開始看thinkphp內建的jsonrpc模組,經過不停的除錯(各種除錯,又刪**,又dbug),發現了這樣一行**:
複製** **如下:
$result = @call_user_func_array(array($object,$request['method']),$request['params'])
注意到這個函式沒,call_user_func_array,array,點進去看引數說明,果然,$request['params']必須是陣列型別,不是陣列死活不認,更可恨的是,thinkphp沒有qiappzvg**對這個引數進行嚴格的校驗,於是都不知道怎麼錯的.
知道了這個原因就好辦了,前面加上校驗.
複製** **如下:
if (is_array($request['params'])) else
這樣就完美解決了問題.
本文標題: thinkphp內建jsonrpc的缺陷分析
本文位址: /wangluo/php/117307.html
thinkphp常用內建標籤
變數輸出使用普通標籤就足夠了,但是要完成其他的控制 迴圈和判斷功能,就需要借助模板引擎的標籤庫功能了,系統內建標籤庫的所有標籤無需引入標籤庫即可直接使用。xml標籤有兩種,包括閉合標籤和開放標籤,乙個標籤在定義的時候就已經決定了是否是閉合標籤還是開放標籤,不可混合使用,例如 閉合標籤 開放標籤 va...
Thinkphp 模板 內建標籤 Volist標籤
volist標籤通常用於查詢資料集 select方法 的結果輸出,通常模型的select方法返回的結果是乙個二維陣列,可以直接使用volist標籤進行輸出。在控制器中首先對模版賦值 user m user list user limit 10 select this assign list list...
thinkphp5內建標籤
知道內建標籤怎麼用,查手冊的時候好查 卻功能的時候在裡面找著來用 1 內建標籤23 變數輸出使用普通標籤就足夠了,但是要完成其他的控制 迴圈和判斷功能,就需要借助模板引擎的標籤庫 4功能了,系統內建標籤庫的所有標籤無需引入標籤庫即可直接使用。5內建標籤包括 6標籤名作用包含屬性 7include 包...