2013-03-06 62 views
4

我正在寻找从5.2升级到5.3的大型PHP网站,并可能超越后。从PHP 5.2升级到PHP 5.3 - 向后不兼容的更改 - 如何轻松检测?

我正在使用的继承代码库非常大,有800,000多行代码,并且大多数情况下查看向后不兼容的更改列表(http://php.net/manual/en/migration53.incompatible.php),大多数这些问题都可以使用字符串搜索代码,但其他人(比如by-reference和API更改)更难搜索。我使用了codesniffer来尝试识别代码的破碎区域,但是codeniffer似乎没有找到所有的东西(比如没有找到by-reference和API问题)。

本质上,我所追求的是一种轻松识别受影响代码的方法,该代码可能错过了代码,而无需运行所有代码或读取所有代码。有没有一种工具可以实质上扫描代码并告诉我问题所在,并节省几周/几个月的时间?

任何想法?如果这很重要,我忘了提及我们使用IIS/Windows。

+1

这可能有助于:http://www.electrictoolbox.com/php-command-line-syntax-checking/'find。 -name \ *。php -exec php -l“{}”\;' – AmazingDreams 2013-03-06 13:04:52

+0

我希望你没有任何单元测试? – deceze 2013-03-06 13:18:05

+0

不幸的是,在代码中没有单元测试或类似的东西,这使得它更加困难。 – Rob 2013-03-06 13:19:34

回答

2

大多数明确向后不兼容的问题(如链接页面上列出的)通过查找该页面上提到的特定功能很容易找到。这是一个相对较短的清单,而且所做的更改都非常具体。即使在一个庞大的代码库中浏览它们也不难,而且大多数列出的更改都是边缘案例,所以希望您不要过多地从该列表中担心。

更大的问题是与list of features that was deprecated in 5.3。这包括您在问题中提到的传递参考功能。

其中一些功能很难通过代码搜寻找到,尤其是对于大型代码库而言,而且如果代码已经存在一段时间了,那么至少有可能会遇到这种情况的可能性非常高他们中有一些。

好消息是,您可以安全地在5.3中运行代码而不触及弃用的功能。这些功能已被弃用;这意味着它们被标记为坏,但实际上它们还没有从语言中删除(对于其中的大多数来说,它们都是5.4),所以关于这些功能,您的软件仍然会像以前一样运行,除了会引发警告信息。

因此,在代码中找到所有这些东西的最好方法就是升级到5.3,运行代码并捕获错误日志中出现的所有警告。

显然,你需要运行相当详尽的测试,以确保你已经找到了所有的东西,但这不一定是坏事 - 事实上坦率地说,如果你不这样做,您正在升级该尺寸系统的语言版本。也许你可以用这个机会开始编写那些你还没有设法解决的测试脚本。