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中使用Oracle数据库(5)
Oct 09 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
php使用parse_url和parse_str解析URL
Feb 22 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
php检测url是否存在的方法
Apr 14 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 PHP
PHP笛卡尔积实现原理及代码实例
Dec 09 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
在网页里看flash的trace数据的js类
2009/01/10 Javascript
Javascript 解疑
2009/11/11 Javascript
jquery 元素相对定位代码
2010/10/15 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
javascript跨域请求包装函数与用法示例
2016/11/03 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
如何基于Python创建目录文件夹
2019/12/31 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
如何用python免费看美剧
2020/08/11 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
什么是servlet
2012/05/08 面试题
物业保安主管岗位职责
2013/12/25 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
会计求职自荐信
2015/03/26 职场文书
Mysql Show Profile
2021/04/05 MySQL
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS