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 mssql 分页SQL语句优化 持续影响
Apr 26 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
php文件操作相关类实例
Jun 18 PHP
php实现通过ftp上传文件
Jun 19 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 PHP
在Laravel5中正确设置文件权限的方法
May 22 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 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字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
javascript时区函数介绍
2012/09/14 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
javascript中的面向对象
2017/03/30 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python创建进程fork用法
2015/06/04 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
Linux上比较文件的命令都有哪些
2013/09/28 面试题
校园报刊亭的创业计划书
2014/01/02 职场文书
父母对孩子的寄语
2014/04/09 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
单位接收函范文
2015/01/30 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript