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 相关文章推荐
smarty中先strip_tags过滤html标签后truncate截取文章运用
Oct 25 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
php json_encode值中大括号与花括号区别
Sep 30 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
19个Android常用工具类汇总
Dec 30 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
php类的扩展和继承用法实例
Jun 20 PHP
PHP简单生成缩略图相册的方法
Jul 29 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
详细解读php的命名空间(一)
Feb 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 运行效率总结(提示程序速度)
2009/11/26 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python 文件操作的详解及实例
2017/09/18 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
什么是事务?事务有哪些性质?
2012/03/11 面试题
上海天奕面试题笔试题
2015/04/19 面试题
工程部主管岗位职责
2013/11/17 职场文书
医学检验专业大学生求职信
2013/11/18 职场文书
党课学习思想汇报
2014/01/02 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
会计工作态度自我评价
2015/03/06 职场文书
演讲开场白和结束语
2015/05/29 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
python基础之类属性和实例属性
2021/10/24 Python
HTML+JS实现在线朗读器
2022/02/15 Javascript