php框架

 首页 > php框架 > ThinkPHP > thinkphp内置jsonRPC的缺陷 - Thinkphp

thinkphp内置jsonRPC的缺陷 - Thinkphp

分享到:
【字体:
导读:
          最近,在开发ios应用啊,要开发ios应用,当然要用到服务器啊,用服务器必然要选用远程调用协议啊,因为之前本人一直都是用php开发的,所以选用thinkphp当框架的apache服务器.至于远程调用协议...

thinkphp内置jsonRPC的缺陷

最近,在开发ios应用啊,要开发ios应用,当然要用到服务器啊,用服务器必然要选用远程调用协议啊,因为之前本人一直都是用php开发的,所以选用thinkphp当框架的apache服务器.

至于远程调用协议,经过思考,还是选用jsonRPC吧,比较简单方便,翻了一下thinkphp(是3.2版本)的手册,发现thinkphp还是支持jsonRPC的,这不错啊,不用自己去写了(当然自己写写也不是什么麻烦的事).

简单地,用thinkphp做客户端,去调用thinkphp服务器端的接口,好用.

接下来是android端,随便取网上找了个包(android-json-rpc.jar),调用一下接口,诶!也好用,进展很顺利.

接下来就换ios了,取github上找了个objc-JSONRpc的项目,拿来调用接口,不好用,很正常,可能是我找的项目有问题,于是我又换了一个Demiurgic-JSON-RPC,还是不好用,我开始对程序产生了怀疑,因为web端和android端调用都没问题,所以我把焦点定位到了我的ios程序,我的天,花了我半天时间,我硬是没找出问题,我还用ios端调用了其他人提供的jsp客户端的接口,也没问题啊.

后来,我开始看thinkphp内置的jsonRPC模块,经过不停的调试(各种调试,又删代码,又Dbug),发现了这样一行代码:

$result = @call_user_func_array(array($object,$request['method']),$request['params'])

注意到这个函数没,call_user_func_array,array,点进去看参数说明,果然,$request['params']必须是数组类型,不是数组死活不认,更可恨的是,thinkphp没有对这个参数进行严格的校验,于是都不知道怎么错的.

知道了这个原因就好办了,前面加上校验.

  1. if (is_array($request['params'])) { 
  2.       $request['params'] = array_values($request['params']); 
  3. else { //开源软件:phpfensi.com 
  4.       $request['params'] = array($request['params']); 

这样就完美解决了问题.

分享到:
ThinkPHP如何导入Excel表中的内容介绍及...
ThinkPHP如何导入Excel表中的内容介绍及注意事项 导入前的准备: 1.下载phpexcel类,网址:http://phpexcel.codeplex.com/releases/view/26478     找到相应的文件下载,如下载好了如 PHPExcel_1.8.0_odt.zip,解压之后会看到里面有三个文件夹和三个.txt文件,但是只需要Classes文件就可以了,...
ThinkPHP分页实例 - Thinkphp
ThinkPHP分页实例 很多人初学thinkphp时,不太熟悉thinkphp的分页使用方法,现在将自己整理的分页方法分享下,有需要的朋友可以看看. 控制器中的代码: $db = M("cost");  $where = "查询条件";  $count = $db->where($where)->count();  $pagecount = 20;  $page = ...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……