【问题标题】:Tools to highlight deprecated functions in PHP4 sources?突出显示 PHP4 源代码中已弃用函数的工具?
【发布时间】:2012-06-11 03:58:16
【问题描述】:

是否有任何魔法工具可以用来扫描为 PHP4 编写的源代码以突出显示 PHP5 中已弃用的函数?我目前正在服务器上运行最新版本的 PHP,需要移植此代码。有什么可以帮助我的吗?

【问题讨论】:

  • 不推荐使用的函数列表是不够的。如果接收到的参数不是预期的类型,一些过去接受某些参数的函数现在会抛出错误。 IIRC,array_merge() 就是一个例子——它曾经接受一个 NULL 参数;现在,如果任何参数不是数组,它就会引发错误。长话短说,确保从 PHP 4 迁移到 5 的唯一真正方法是进行大量测试。
  • 通过引用分配 new 的返回值也被弃用了。这是一场噩梦。

标签: php deprecated


【解决方案1】:

如果您将错误报告级别设置为显示它们,PHP 5.3 将引发 E_DEPRECATED 警告。

【讨论】:

  • 问题是我可以在每个错误发生时修复错误,但我正在寻找一种扫描所有来源的方法。我目前正在修复这些错误,但我可能会错过一些在我测试软件时可能不会出现的错误。
【解决方案2】:

我想自己做这样的事情。使用deprecated features in PHP 5.3.x 的列表,我创建了一个正则表达式来搜索这些函数的任何使用:

(?i:(call_user_method\(|call_user_method_array\(|define_syslog_variables\(|dl\(|ereg\(|ereg_replace\(|eregi\(|eregi_replace\(|set_magic_quotes_runtime\(|session_register\(|session_unregister\(|session_is_registered\(|set_socket_blocking\(|split\(|spliti\(|sql_regcase\(|mysql_db_query\(|mysql_escape_string\())

(不区分大小写,每个函数名称都包括左括号,以避免误报;“dl”否则会带来很多噪音。)

如果您使用的是findgrep 的系统,则可以执行如下操作:

find <directory to search> -type f -name '*.php' -exec grep -R -P -H "<above regex>" {} \;

为了举一个更具体的例子,我只是使用了以下内容:

find htdocs -type f -name '*.php' -exec grep -R -P -H "(?i:(call_user_method\(|call_user_method_array\(|define_syslog_variables\(|dl\(|ereg\(|ereg_replace\(|eregi\(|eregi_replace\(|set_magic_quotes_runtime\(|session_register\(|session_unregister\(|session_is_registered\(|set_socket_blocking\(|split\(|spliti\(|sql_regcase\(|mysql_db_query\(|mysql_escape_string\())" {} \;

看来我现在需要自己替换几个 session_registersession_unregister 实例!

对于已弃用的 INI 指令和参数也可以执行相同的操作。

【讨论】:

    【解决方案3】:

    appendices of the manual 包含一些迁移信息,但我认为它不包含您要查找的内容。

    我想到的一种方法(可能不准确但可以使用)是每个 PHP 下载中包含的 news.txt。我是writing a script atm,它解析这个文件并检查不推荐使用的函数可能是我可以添加的东西。我正在开发另一个项目 atm,但我想在更大的重建版本中为此添加功能。

    【讨论】:

    • 脚本的链接已损坏。你能解决这个问题吗?
    • 已更新,我认为将使其成为一个文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多