ThinkPHP内置jsonRPC的缺陷分析


Posted in PHP onDecember 18, 2014

本文较为详细的分析了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 相关文章推荐
新手学PHP之数据库操作详解及乱码解决!
Jan 02 PHP
php 表单验证实现代码
Mar 10 PHP
php 获取mysql数据库信息代码
Mar 12 PHP
需要发散思维学习PHP
Jun 29 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
ThinkPHP添加更新标签的方法
Dec 05 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
Dec 18 #PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 #PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 #PHP
php可生成缩略图的文件上传类实例
Dec 17 #PHP
php提示Failed to write session data错误的解决方法
Dec 17 #PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 #PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 #PHP
You might like
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
python判断字符串是否纯数字的方法
2014/11/19 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Python3 合并二叉树的实现
2019/09/30 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
银行实习生自我鉴定范文
2013/09/19 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
论文指导教师评语
2014/04/28 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
个人总结与自我评价
2015/02/14 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
小学六一主持词开场白
2015/05/28 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书