您的经验将PHP 4移至PHP 5

opH*_*AME 14 php migration php4

我们必须将50多个应用程序(小/大)移动到PHP 5.3(从PHP 4.1开始).有些人有这方面的经验吗?

  • 需要时间
  • 工具
  • 最佳环境设置(服务器/测试?)

首先迁移到PHP 5.2是否有意义?有没有办法使用"PHP 4功能"自动检测应用程序哪些不适用于PHP 5?

我不知道如何处理这样的项目.谢谢!

ZoF*_*reX 11

要阅读的最重要的事情是关于从PHP 4迁移到PHP 5的php.net部分.自PHP 5首次出现以来,它们一直在向更严格的语言发展(默认情况下,PHP在版本6中将处于严格模式),因此如果不是错误,您应该会看到很多警告.

自PHP 5.0发布以来,进行了更多向后兼容性的更改,为了完整性,您还应该阅读:

从PHP 5.0.x迁移到PHP 5.1.x.

从PHP 5.1.x迁移到PHP 5.2.x.

从PHP 5.2.x迁移到PHP 5.3.x.

我意识到这是一个很多阅读,但这应该是一个可以打破的所有内容的综合列表.


mar*_*rio 6

PHP_CompatInfo可以帮助对依赖项进行一些检查.PHP_CodeSniffer可能会找到过时的结构.

但是,PHP版本之间的差异往往是辉煌的.代码依赖于边缘情况从来没有遇到太多问题.除非这段代码仍然依赖于长的超级全局$ HTTP_POST_VARS,否则会有一些其他陷阱.

例如,替换magic_quotes依赖项的有用习惯是:

$_POST = array_map("mysql_real_escape_string", $_POST);
Run Code Online (Sandbox Code Playgroud)

因为实际上大多数应用程序永远不会被重写以使用更现代的数据库API.


Spu*_*ley 6

  1. 类的一些语法在PHP4和PHP5之间发生了变化 - 例如,在PHP4中,构造函数方法的命名与类相同,而在PHP5中,构造函数被命名__construct().

    PHP5仍然可以处理PHP4风格的类定义,所以你的代码可能仍然可以工作,但你仍然建议将它们改为新风格,因为有很多功能你将无法使用否则使用.此外,当然,最终将删除旧语法; 你的PHP4课程将来会破坏,所以最好现在更改它们,而不是等到它紧急.

  2. 全局.您应该已经被使用$_REQUEST,$_POST,$_GET$_COOKIES在PHP4,很多旧的代码可能仍在使用老式的自动全局,这是标准的ING PHP3.这是一个巨大的安全风险,因此如果您仍在使用register_globals,您应该立即开始编写代码,至少使用$_REQUEST您使用自动全局的每个地方.这实际上可能是一项非常困难的任务 - 如果代码中没有任何内容指示一种方式或另一种方式,那么很难通过大型应用程序来搜索哪些变量是全局变量而哪些变量不是全局变量. .从必须这样做的人那里拿走它,这可能是一场真正的噩梦.但这并不是转移到PHP5的具体内容 - 正如我所说,即使你坚持PHP4,你确实需要处理这个问题.PHP5不会改变任何东西,除了register_globals标志现在默认为关闭,这可能会给你更多的动力来实际做这项工作.

  3. 如果使用任何ereg_正则表达式函数,则不推荐使用这些函数.您应该使用等效preg_函数替换它们.这不是一项大任务,事实上功能仍然可用,所以它可以等待,只要你准备忽略告诉你函数被弃用的警告.但同样,与类语法一样,考虑现在改变它们可能是明智的.

  4. 旧的语法已被弃用的另一个已更改的功能是传递引用.在PHP4中,我们鼓励使用&函数调用中的字符通过引用传递变量.在PHP5中,正确的方法是将&字符放在函数声明中而不是您调用它的位置.同样,旧语法仍然有效,但前提是你可以忍受PHP向你发出警告.


Dis*_*dev 5

首先你应该检查php.ini设置,特别是如register_globals,magic_quotes_gpc - 它可以打破你的应用程序的逻辑.