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连接MongoDB示例代码
Sep 06 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
Jun 24 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
Mar 09 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
微信接口生成带参数的二维码
Jul 31 PHP
php ajax confirm 删除实例详解
Mar 06 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 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
让PHP支持断点续传的源码
2010/05/16 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python多线程并发及测试框架案例
2019/10/15 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
python怎么自定义捕获错误
2020/06/29 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
搬家公司的创业计划书
2014/01/01 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA