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 相关文章推荐
超级简单的发送邮件程序
Oct 09 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
PHP操作XML作为数据库的类
Dec 19 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
javascript some()函数用法详解
Nov 13 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
php控制文件下载速度的方法
Mar 24 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
Jul 09 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 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
Terran兵种介绍
2020/03/14 星际争霸
模仿OSO的论坛(五)
2006/10/09 PHP
PHP中的日期处理方法集锦
2007/01/02 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
php实现字符串翻转的方法
2015/03/27 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
Ionic快速安装教程
2016/06/03 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
升学宴演讲稿
2014/09/01 职场文书
工作证明格式范文
2015/06/15 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Python自动化之批量处理工作簿和工作表
2021/06/03 Python