ThinkPHP内置jsonRPC的缺陷分析

2015-01-24信息快讯网

这篇文章主要介绍了ThinkPHP内置jsonRPC的缺陷,以实例形式详细分析了ThinkPHP内置jsonRPC校验的缺陷与解决方法,具有一定的参考借鉴价值,需要的朋友可以参考下

本文较为详细的分析了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没有对这个参数进行严格的校验,于是都不知道怎么错的.

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

if (is_array($request['params'])) {
      $request['params'] = array_values($request['params']);
} else {
      $request['params'] = array($request['params']);
}

这样就完美解决了问题.

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

php使用正则表达式获取图片url的方法
php使用CURL伪造IP和来源实例详解
php+mysql实现无限分类实例详解
php截取html字符串及自动补全html标签的方法
php在linux下检测mysql同步状态的方法
php中JSON的使用与转换
ThinkPHP 404页面的设置方法
THINKPHP内容分页代码分享
php5.4以下版本json不支持不转义内容中文的解决方法
PHP针对JSON操作实例分析
PHP中$this和$that指针使用实例
THINKPHP2.0到3.0有哪些改进之处
浅谈thinkphp的实例化模型
Thinkphp中的curd应用实用要点
js+php实现静态页面实时调用用户登陆状态的方法
PHP采集静态页面并把页面css,img,js保存的方法
ThinkPHP通过AJAX返回JSON的两种实现方法
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
php生成二维码时出现中文乱码的解决方法
php判断文件上传类型及过滤不安全数据的方法
php可生成缩略图的文件上传类实例
php提示Failed to write session data错误的解决方法
phpmyadmin提示The mbstring extension is missing的解决方法
完美解决thinkphp验证码出错无法显示的方法
thinkphp缓存技术详解
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
thinkphp文件处理类Dir.class.php的用法分析
thinkphp实现上一篇与下一篇的方法
php递归json类实例
ThinkPHP模版中导入CSS和JS文件的方法
Thinkphp搭建包括JS多语言的多语言项目实现方法
php jsonp单引号转义
PHP使用json_encode函数时不转义中文的解决方法
©2014-2024 dbsqp.com