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 随机生成10位字符代码
Mar 26 PHP
php懒人函数 自动添加数据
Jun 28 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 PHP
使用Sphinx对索引进行搜索
Jun 25 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
php链表用法实例分析
Jul 09 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 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多层数组与对象的转换实例代码
2013/08/05 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
python根据路径导入模块的方法
2014/09/30 Python
全面理解Python中self的用法
2016/06/04 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
怎样有效的进行自我评价
2013/10/06 职场文书
护士个人简历自荐信
2013/10/18 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
外科护士长工作总结
2015/08/12 职场文书