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 程序授权验证开发思路
Jul 09 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
PHP伪静态Rewrite设置之APACHE篇
Jul 30 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
Oct 15 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 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
php下使用SMTP发邮件的代码
2008/01/10 PHP
PHP 采集程序 常用函数
2008/12/18 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
python实现感知器算法(批处理)
2019/01/18 Python
python加载自定义词典实例
2019/12/06 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
幼儿园安全责任书
2014/04/14 职场文书
校园标语大全
2014/06/19 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
德生2P3收音机开箱评测
2022/04/30 无线电