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和ACCESS写聊天室(七)
Oct 09 PHP
PHP+javascript液晶时钟
Oct 09 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
Oct 25 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
php禁止某ip或ip地址段访问的方法
Feb 25 PHP
Laravel 5框架学习之向视图传送数据
Apr 08 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
php数组函数array_walk用法示例
May 26 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 PHP
php is_writable判断文件是否可写实例代码
Oct 13 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处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
初学python数组的处理代码
2011/01/04 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
python hough变换检测直线的实现方法
2019/07/12 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
python实现感知机模型的示例
2020/09/30 Python
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
职称评定自我鉴定
2014/03/18 职场文书
小学语文业务学习材料
2014/06/02 职场文书
违纪检讨书
2015/01/27 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
MyBatis 动态SQL全面详解
2021/10/05 MySQL
Fluentd搭建日志收集服务
2022/09/23 Servers