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 相关文章推荐
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
spl_autoload_register与autoload的区别详解
Jun 03 PHP
php empty()与isset()区别的详细介绍
Jun 17 PHP
php 地区分类排序算法
Jul 01 PHP
php连接oracle数据库的核心步骤
May 26 PHP
php常用正则函数实例小结
Dec 29 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
php+laravel 扫码二维码签到功能
May 15 PHP
详解PHP设计模式之依赖注入模式
May 25 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读取xml实例代码
2010/01/28 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
编程语言Python的发展史
2014/09/26 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Django 连接sql server数据库的方法
2018/06/30 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
详解python读取和输出到txt
2019/03/29 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
应用化学专业职业生涯规划书
2014/01/22 职场文书
活动总结格式范文
2014/04/26 职场文书
合同补充协议书
2016/03/24 职场文书
Django drf请求模块源码解析
2021/06/08 Python
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
python实现简单的三子棋游戏
2022/04/28 Python