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加速的eAccelerator dll支持文件打包下载
Sep 30 PHP
PHP parse_url 一个好用的函数
Oct 03 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
php的debug相关函数用法示例
Jul 11 PHP
PHP 接入微信扫码支付总结(总结篇)
Nov 03 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
Mar 30 PHP
PHP程序员必须知道的两种日志实例分析
May 14 PHP
Yii 框架入口脚本示例分析
May 19 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
destoon公司主页模板风格的添加方法
2014/06/20 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
python通过文件头判断文件类型
2015/10/30 Python
python 文件操作删除某行的实例
2017/09/04 Python
Python中optparser库用法实例详解
2018/01/26 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
Python 必须了解的5种高级特征
2020/09/10 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
出纳员岗位责任制
2014/02/11 职场文书
餐饮营销方案
2014/02/23 职场文书
低碳环保倡议书
2014/04/14 职场文书
储备店长岗位职责
2015/04/14 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
经销商会议开幕词
2016/03/04 职场文书
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js