2012-03-06 101 views
4

我目前正在调查将我的网站从PHP 5.1.6升级到5.3.10的可行性。该网站正在CentOS上运行。从PHP 5.1升级到PHP 5.3

我知道主要的区别,比如引入命名空间和闭包。我也花了一些时间去看看移植指南中的“向后不兼容性变化”,看起来不错,而且我将花费大量的时间。

有没有我应该留意的“疑难杂症”?

+0

我想说的一件事是,如果你的代码库大部分已经正确地单元测试过,那么这个问题就不需要了,你几乎可以100%确定事情会好起来。 – Evert 2012-03-06 16:29:33

+1

@Evert:并非如此,这些版本之间有很多变化。即。 v5.1中正确的东西在v5.3中并不总是如此,所以单元测试根本没有帮助。 – Orbling 2012-03-06 16:31:33

+5

主要的“陷阱”是PHP 5.4现在已经不存在了。 – Xeoncross 2012-03-06 16:32:06

回答

3

我最近跳到5.3.x以及并指出了以下问题(从我blog来源):

date.timezone(php.ini中):

  • PHP开发人员如果你没有正确设置这个设置,你会在任何日期函数周围看到许多警告。

例子:

date.timezone = America/Los_Angeles 

__toString():

  • 在PHP 5.3,魔术__toString()方法,不再让您在传递参数,这对有意义一些水平,但确实降低了灵活性。

正如在评论中提到的,你最好升级到5.3.10,然后迁移到5.4.1甚至5.4.2。立即跳到5.4.0并不是一个好主意,当他们发布5.4.1的更新日志时,你会明白为什么。

+1

除了这样的一些变化之外,确保你安装你在上次安装时被认为是理所当然的扩展是战斗的一半,编写正确的代码将解决另一半的问题。 – Xeoncross 2012-03-06 19:02:45

1

我不得不在PHP 5.3上使用MediaWiki 1.15.1,因为我重新托管了它(here)。当时的开发团队已经在交接中“放手”,所以社区志愿者需要介入来做到这一点。 MW开发者的建议是“MW1.15与PHP 5.3不兼容;升级到MW 1.17”

由于与定制扩展相关的各种原因以及需要坚持MW 1.15架构作为垫脚石,我必须坚持MW 1.15。男人,这是一种痛苦!

主要问题是:“通过值调用的by-reference参数的函数的行为已经发生了变化,之前函数会接受by-value参数,现在会发出致命错误。”换句话说,5.1和5.2在这里有一个宽松的容忍度,5.3会有一个致命的错误。所有这些都是静态的,这样做是不切实际的,所以这是一种尝试行使通用路径的情况,挖掘错误日志深入挖掘并找到发生这种情况的几十个案例,并根据记录的API检查各个案例以案例为基础我想不出任何其他烧毁的incompatibilities