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操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
thinkphp数据查询和遍历数组实例
Nov 28 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
PHP计算日期相差天数实例分析
Feb 23 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
对laravel的session获取与存取方法详解
Oct 08 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集成FCK的函数代码
2008/09/27 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
JavaScript 常用函数
2009/12/30 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
python中关于数据类型的学习笔记
2020/07/19 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
什么是servlet链?
2014/07/13 面试题
搞笑婚礼主持词
2014/03/13 职场文书
三年级学生评语
2014/04/23 职场文书
美术专业自荐信
2014/07/07 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python