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 simple_html_dom.php+正则 采集文章代码
Dec 24 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
Feb 15 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
PHP设计模式之PHP迭代器模式讲解
Mar 22 PHP
PHP rsa加密解密算法原理解析
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
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
php操作access数据库的方法详解
2017/02/22 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
js调用flash的效果代码
2008/04/26 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
python实现打砖块游戏
2020/02/25 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
彻底解决Python包下载慢问题
2020/11/15 Python
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
高中同学会活动方案
2014/08/14 职场文书
详解 TypeScript 枚举类型
2021/11/02 Javascript
python小型的音频操作库mp3Play
2022/04/24 Python