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 相关文章推荐
很实用的一个完整email发送程序
Oct 09 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
php实现递归抓取网页类实例
Apr 03 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
PHP实现linux命令tail -f
Feb 22 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
PHP实现递归的三种方法
Jul 04 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
Python标准库os.path包、glob包使用实例
2014/11/25 Python
python类继承用法实例分析
2015/05/27 Python
使用python实现knn算法
2017/12/20 Python
python学习开发mock接口
2019/04/28 Python
Python中url标签使用知识点总结
2020/01/16 Python
python在不同条件下的输入与输出
2020/02/13 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
自荐信封面
2013/12/04 职场文书
售房协议书
2014/08/19 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
MySQL详细讲解变量variables的用法
2022/06/21 MySQL