ThinkPHP内置jsonRPC的缺陷分析

 更新时间:2014年12月18日 11:40:49   投稿:shichen2014  
这篇文章主要介绍了ThinkPHP内置jsonRPC的缺陷,以实例形式详细分析了ThinkPHP内置jsonRPC校验的缺陷与解决方法,具有一定的参考借鉴价值,需要的朋友可以参考下

本文较为详细的分析了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守护进程化在C和PHP环境下的实现

    PHP守护进程化在C和PHP环境下的实现

    这篇文章主要介绍了PHP守护进程化的实现的方法以及原理过程,以及在C环境和PHP环境下实现的代码,喜欢的朋友收藏一下。
    2017-11-11
  • ThinkPHP实现一键清除缓存方法

    ThinkPHP实现一键清除缓存方法

    这篇文章主要介绍了ThinkPHP实现一键清除缓存方法,需要的朋友可以参考下
    2014-06-06
  • Laravel框架中VerifyCsrfToken报错问题的解决

    Laravel框架中VerifyCsrfToken报错问题的解决

    这篇文章主要给大家介绍了关于Laravel框架中VerifyCsrfToken报错问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • php微信扫码支付 php公众号支付

    php微信扫码支付 php公众号支付

    这篇文章主要为大家详细介绍了php微信扫码支付,php公众号支付功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例

    ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例

    这篇文章主要介绍了ThinkPHP结合ajax、Mysql实现的客户端通信功能,需要的朋友可以参考下
    2014-06-06
  • ThinkPHP访问不存在的模块跳转到404页面的方法

    ThinkPHP访问不存在的模块跳转到404页面的方法

    这篇文章主要介绍了ThinkPHP访问不存在的模块跳转到404页面的方法,需要的朋友可以参考下
    2014-06-06
  • PHP设计模式之单例模式入门与应用详解

    PHP设计模式之单例模式入门与应用详解

    这篇文章主要介绍了PHP设计模式之单例模式入门与应用,结合实例形式详细分析了PHP单例模式的具体概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-12-12
  • laravel批量生成假数据的方法

    laravel批量生成假数据的方法

    今天小编就为大家分享一篇laravel批量生成假数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • PHP语法自动检查的Vim插件

    PHP语法自动检查的Vim插件

    Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。
    2014-08-08
  • PHP的mysqli_ssl_set()函数讲解

    PHP的mysqli_ssl_set()函数讲解

    今天小编就为大家分享一篇关于PHP的mysqli_ssl_set()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论