表 1. ereg() 函数及其 PCRE 等效函数
ereg() 函数 | 类似的 preg() 函数 |
---|---|
ereg(), eregi() | preg_match() |
ereg_replace(), ereg_replacei() | preg_replace() |
PHP V5.3
这里提到的一些特性还将迁移到 PHP V5.3,5.3 版本是在 2008 年的第一季度发布的。您可能希望升级到 V5.3 并开始使用这些特性,但是直接迁移到 PHP V6 能够节省该步骤。下面列出向后支持 v5.3 的特性:
- 名称空间
- 默认情况下在核心函数中包含 XMLReader 和 XMLWriter
结束语
PHP V6 将提供许多改进,并且删除老版本 PHP 中的一些特性。为了利用最新的特性和了解删除的特性,请仔细阅读 NEWS 列表(见 参考资料),它包含 PHP V6 添加或删除的特性的最新信息。现在,您可以下载开发人员版本的 PHP V6,并确保您的应用程序不受这些变更的影响。您还可以利用这次机会清理自己的脚本,删除本文不推荐使用的函数,或更新您的语法以确保应用程序受支持。 (责任编辑:A6)
GET['username'])); ?>既然即将完全删除对 magic_quotes 的支持,get_magic_quotes_gpc() 函数就不再可用。这可能会影响一些老版本的 PHP 脚本,因此在更新之前,确保对所有存在这些函数的地方进行修复。
register_globals
register_globals 配置键在 PHP V4.2 中已经默认关闭,当时也引起了争议。当 register_globals 打开之后,就能轻松地使用可能注入了来自 HTML 表单的值的变量。因为在脚本中并不真正需要初始化这些变量,所以很容易编写出带有安全漏洞的脚本。register_globals 文档(见 参考资料)提供关于 register_globals 的更多信息。清单 4 是一个使用 register_globals 的例子。
清单 4. 使用 register_globals(不推荐)
___FCKpd___3 |
如果您的 PHP 代码使用了全局变量,那么应该更新它。即便不是为了使用新版本的 PHP 而更新它,从安全角度考虑,您也应该进行更新。更新完成之后,您的代码应该类似于清单 5。
清单 5. 更加明确的代码(推荐)
___FCKpd___4 |
register_long_arrays
当打开 register_long_arrays 设置时,它将注册 $HTTP_*_VARS 预定义变量。如果您目前使用更长的变量,那么需要进行更新,以适应更短的变量。这个设置是在 PHP V5 中引入的(考虑到向后兼容性),但出于性能考虑,PHP 团队建议关闭它。清单 6 是一个使用 register_long-arrays 的例子。
清单 6. 使用注册数组(不推荐)
___FCKpd___5 |
如果您的 PHP 代码类似于清单 6,那么更新它,如清单 7 所示。如果 register_long_arrays 设置是打开的,那么关闭它,然后再次测试脚本。
清单 7. 使用 $_GET(推荐)
___FCKpd___6 |
safe_mode
当打开了 safe_mode 配置键时,它确保所操作的文件的所有者与所执行的脚本的所有者匹配。这最初作为在共享服务器环境中进行操作时(许多 ISP 都这样做)处理安全性的一种方法。(要获得受 safe_mode 更改影响的函数列表的链接,请参见 参考资料)。您的 PHP 代码不会受这一更改的影响,但是有必要了解它,免得在未来设置 PHP 时使用它或在脚本中依赖它。
PHP 标记
Microsoft Active Server Pages (ASP) 样式的标记(PHP 标记的缩短版)不再受支持。要确保您的脚步不存在这种问题,请检查是否在 PHP 文件中使用了 <% 或 %> 标记。如果使用了,那么分别将其替换为 <?php 和 ?>。
FreeType 1 和 GD 1
PHP 团队删除了对 FreeType 1 和 GD 1 的支持,其理由是这两个库缺乏持续开发,并且已经不适应时代要求。不过,这两个库的更新版本将提供更好的功能。要更多地了解 FreeType 和 GD,参见 参考资料。
ereg
将从核心 PHP 支持中删除支持 Portable Operating System Interface (POSIX) 正则表达式的 ereg 扩展。如果您正在使用 POSIX 正则表达式函数之一,这一更改将带来影响,除非您包含 ereg 功能。如果您正在使用 POSIX 正则表达式,可以考虑更新正则表达式函数,以使用 Perl-Compatible Regular Expression (PCRE) 函数,因为它们提供更多的特性和更好的平台。表 1 列出了删除 ereg 之后将不可用的 POSIX 正则表达式函数。同时展示了它们的 PCRE 代替函数。
表 1. ereg() 函数及其 PCRE 等效函数
ereg() 函数 | 类似的 preg() 函数 |
---|---|
ereg(), eregi() | preg_match() |
ereg_replace(), ereg_replacei() | preg_replace() |
PHP V5.3
这里提到的一些特性还将迁移到 PHP V5.3,5.3 版本是在 2008 年的第一季度发布的。您可能希望升级到 V5.3 并开始使用这些特性,但是直接迁移到 PHP V6 能够节省该步骤。下面列出向后支持 v5.3 的特性:
- 名称空间
- 默认情况下在核心函数中包含 XMLReader 和 XMLWriter
结束语
PHP V6 将提供许多改进,并且删除老版本 PHP 中的一些特性。为了利用最新的特性和了解删除的特性,请仔细阅读 NEWS 列表(见 参考资料),它包含 PHP V6 添加或删除的特性的最新信息。现在,您可以下载开发人员版本的 PHP V6,并确保您的应用程序不受这些变更的影响。您还可以利用这次机会清理自己的脚本,删除本文不推荐使用的函数,或更新您的语法以确保应用程序受支持。 (责任编辑:A6)
GET['username']"; ?>在针对新版本 PHP 进行处理之后,您的 PHP 代码应该类似于清单 3。
清单 3. 使用参数化查询(推荐)
___FCKpd___2 |
既然即将完全删除对 magic_quotes 的支持,get_magic_quotes_gpc() 函数就不再可用。这可能会影响一些老版本的 PHP 脚本,因此在更新之前,确保对所有存在这些函数的地方进行修复。
register_globals
register_globals 配置键在 PHP V4.2 中已经默认关闭,当时也引起了争议。当 register_globals 打开之后,就能轻松地使用可能注入了来自 HTML 表单的值的变量。因为在脚本中并不真正需要初始化这些变量,所以很容易编写出带有安全漏洞的脚本。register_globals 文档(见 参考资料)提供关于 register_globals 的更多信息。清单 4 是一个使用 register_globals 的例子。
清单 4. 使用 register_globals(不推荐)
___FCKpd___3 |
如果您的 PHP 代码使用了全局变量,那么应该更新它。即便不是为了使用新版本的 PHP 而更新它,从安全角度考虑,您也应该进行更新。更新完成之后,您的代码应该类似于清单 5。
清单 5. 更加明确的代码(推荐)
___FCKpd___4 |