ThinkPHP从2.1升级到3.1.3并支持php7


  一个做站的朋友弄了一套叫飞飞影视导航的cms系统部署有点问题,让我帮忙看一下,这个系统是基于ThinkPHP 2.1开发的,对ThinkPHP也不是太了解,不过这个也太老了,估计注入漏洞一大堆,我去ThinkPHP官网转了一圈,现在都是5.0版本的了,支持php7需要3.2以上才行,粗略的看了一下3.1升级到3.2,架构改动很大,如果要改的话工作量很大,所以可行的方案就是从2.1升级到3.1.3,再对3.1.3进行改动支持php7,5.0就不考虑了。

从ThinkPHP 2升级到3.1.3这个网上已经有不少文章,参考处理就行了,另外这些文章处理之外还有些问题,大致如下

  1. 1、下面两个函数需要在各个文件替换
    eregi -> preg_match
    eregi_replace -> preg_replace
  2. 2、common里functions.php下面这个URL处理函数,原来的函数是四个参数的,后来增加了一个domain,但是把第二和第三个参数换位置了,这个问题框架有点坑,哪有这样扩展的
    function U($url='',$vars='',$suffix=true,$redirect=false,$domain=false)
  3. 3、引入ORG/Util的包要放置ThinkPHP/Extend/Library下
  4. 4、由于String已经变为保留关键字String.class.php的类需要重命名

完成了ThinkPHP 3.1.3支持php7之后,事情还没完,项目同样需要做不少处理


  1. 1、入口修改,原来2.x入口实例化一个App对象的代码不需要了

    require(THINK_PATH.'/ThinkPHP.php');
    // 下面两行直接删除
    $App = new App();
    $App->run();
  2. 2、模板路径修改Tpl放置项目Lib目录下面,并定义一个变量

    define('TEMPLATE_PATH', './Lib/Tpl/');
  3. 3、多个参数的函数调用,如果参数没有默认值添加上,或者传齐参数,当然前者处理更好

  4. 4、URL路径映射大小写问题,就这个cms我发现升级到TP 3.1.3之后很多地方报错,检查发现是url映射类的时候大小写出问题导致的,配置了URL_CASE_INSENSITIVE无法解决,我也没用过这个框架,具体原因不太清楚,我直接修改了框架增加了一个自定义变量来处理,尽量不改动框架逻辑。

  5. 5、安全问题,去看了一下漏洞列表,这个感觉就像一扇被机枪扫过的木门,都是洞,对照3.2.4及5.0的版本改了几个稍微严重点的剩下的就放弃治疗了,有些地方需要重构,没时间,本来打算半天搞定的,浪费了一个周末。


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://11000011.com/?id=76

« 上一篇 下一篇 »

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

主机推荐

  • 搬瓦工