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发电子邮件
Oct 09 PHP
php chr() ord()中文截取乱码问题解决方法
Sep 08 PHP
php 分库分表hash算法
Nov 12 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
php中分页及SqlHelper类用法实例
Jan 12 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
Aug 10 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
php 将json格式数据转换成数组的方法
Aug 21 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
模仿OSO的论坛(四)
2006/10/09 PHP
MySQL中create table语句的基本语法是
2007/01/15 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
javascript格式化日期时间方法汇总
2015/06/19 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
Python 处理图片像素点的实例
2019/01/08 Python
python用requests实现http请求代码实例
2019/10/31 Python
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
初二物理教学反思
2014/01/29 职场文书
服务员岗位职责
2014/01/29 职场文书
搞笑获奖感言
2014/01/30 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL