Nathan A. Good, 高级信息工程师, Consultant
2009 年 6 月 29 日
PHP 已经很流行,它不仅用于各个领域(根据 Netcraft),而且还得到大部分 ISP 的支持和知名 Web 公司(比如 Yahoo!)的使用。此外,未来的 PHP 版本将引入新的特性以提高其易用性和安全性。您已经为使用 PHP V6 做好准备了吗?假设您要升级到 PHP V6,您的脚本能正常执行吗?或者需要进行一些更改?本文主要介绍 PHP V6 的变化(一些特性向后支持 PHP V5.x 版本),您可能需要根据这些变化对当前的脚本作出一些调整。
如果您尚未使用 PHP,并且一直考虑使用它,那么可以看看它的最新特性。这些特性 —— 从 Unicode 支持到 XML 支持 —— 将让您能够更加轻松地编写出特性丰富的 PHP 应用程序。
PHP V6 的新特性
PHP V6 的初步副本已经发布,所以您可以下载它并试用本文列出的许多特性和更改。对于当前副本已经实现的特性,见 参考资料。
改进的 Unicode 支持
PHP V6 的最大改进是在许多核心函数中支持 Unicode 字符串。这个新特性有巨大的影响,因为它允许 PHP 支持更广泛的字符集,从而获得更多的国际支持。所以,如果您是一位使用不同语言(比如 Java™ 编程语言,这些语言的国际化(il8n)支持比 PHP 好)的开发人员或架构师,那么您应该看看国际化支持改进后的 PHP。
现在,已经可以下载和使用针对开发人员的 PHP V6,所以您可以看到其中的一些特性已经支持 Unicode 字符串。要获取已经经过测试和验证的可以处理 Unicode 的函数,参见 参考资料。
|
什么是 Unicode? Unicode 是一组字符、字符编码和编码方法行业标准,其主要目标是支持 i18n 和本地化 (i10n)。Unicode Transformation Format (UTF) 为 Unicode 指定一种编码字符的方式。关于 Unicode 和 UTF 的更多信息,见 参考资料 部分。 |
|
名称空间
名称空间 是一种避免函数名和类名出现冲突的方法,并且不会在命名约定中使用前缀,从而增强了函数名和类名的可读性。因此通过使用名称空间,您可以使用可能已被他人使用的类名,但不用担心出现问题。清单 1 提供一个 PHP 的名称空间例子。
您不需要对代码进行任何更新或修改,因为不包含名称空间的 PHP 代码将能够正常运行。因为名称空间特性向后支持至 PHP V5.3,因此当该特性可用时,您可以在 PHP 应用程序中引入名称空间。
清单 1. 名称空间的例子
<?php
// I'm not sure why I would implement my own XMLWriter, but at least
// the name of this one won't collide with the one built in to PHP
namespace NathanAGood;
class XMLWriter
{
// Implementation here...
}
$writer = new NathanAGood::XMLWriter();
?>
|
Web 2.0 特性
取决于您使用 PHP 的方式以及当前的代码,PHP V6 中的语言和语法差别对您的影响可能没有接下来的特性大,这些特性允许您将 Web 2.0 特性直接引入到 PHP 应用程序中。
SOAP
SOAP 是 Web 服务采用的协议之一,并且在许多其他语言中都得到支持,比如 Java 编程语言和 Microsoft® .NET。尽管有许多其他方式可以使用和公开 Web 服务(比如 Representational State Transfer,REST),SOAP 仍然是实现不同平台之间的交互性的常用方法。除了 PHP Extension and Application Repository (PEAR) 库中的 SOAP 模块之外,PHP V5 还引入了一个 SOAP 扩展。默认情况下这个扩展是禁用的,所以您或您的 ISP 必须启用它。此外,您可以通过 PEAR 包构建 SOAP 客户端和服务器,比如 SOAP 包。
除非您更改了默认设置,否则 SOAP 扩展在 PHP V6 中是启用的。这些扩展为实现 SOAP 客户端和 SOAP 服务器提供一种简易的方法,从而使您能够构建使用和提供 Web 服务的 PHP 应用程序。
如果默认启用了 SOAP 扩展,您就不需要在 PHP 中配置它们。如果您开发了 PHP 应用程序并发布给 ISP,那么您必须和 ISP 进行核实,确保他们在升级时为您启用 SOAP 扩展。
XML
从 PHP V5.1 开始,XMLReader 和 XMLWriter 就成为了 PHP 核心的一部分,这使您能够在 PHP 应用程序中更加轻松地处理 XML。与 SOAP 扩展一样,如果您使用 SOAP 或 XML 的话,这个特性是个好消息,因为 PHP V6 比 V4 更适合您。
XMLWriter 和 XMLReader 是基于流的面向对象类,它们允许您读写 XML,并且不要担心 XML 的细节。
删除的特性
PHP V6 在添加一些新特性的同时,也删除了以前版本中的一些函数和特性。被删除的大部分东西,比如 register_globals
和 safe_mode
,在当前的 PHP 中都被广泛认为是 “有漏洞的”,因为它们可能招致安全风险。为了保持 PHP 的简洁性,将删除下面小节列出的函数和特性。在 ISP 或企业升级到 PHP V6 之后,反对删除这些内容的人很可能会给现有的脚本带来安全问题,而支持删除的人将会很幸运,因为 PHP 团队为他们修复了一些漏洞,并且提供更加干净、安全的实现。
从 PHP V6 删除的特性包括:
-
magic_quotes
-
register_globals
-
register_long_arrays
-
safe_mode
magic_quotes
由于 magic_quotes
导致可移植性、性能和易用性方面的问题,所以 PHP 文档不鼓励使用它。鉴于这个原因,PHP V6 干脆删除了该特性。因此,在升级到 PHP V6 之前,要确保您的代码没有使用 magic_quotes
。如果您正在使用 magic_quotes
为数据库调用转换字符串类型,请使用数据库实现的参数化查询(如果支持的话)。如果不支持参数化查询,请使用数据库实现的类型转换函数,比如针对 MySQL 的 mysql_escape_string
或针对 PostgreSQL 的 pg_escape_string
。清单 2 显示了一个使用 magic_quotes
的例子。
清单 2. 使用 magic_quotes
(不推荐)
<?php
// Assuming magic_quotes is on...
$sql = "INSERT INTO USERS (USERNAME) VALUES $_GET['username']";
?>
|
在针对新版本 PHP 进行处理之后,您的 PHP 代码应该类似于清单 3。
清单 3. 使用参数化查询(推荐)
<?php
// Using the proper parameterized query method for MySQL, as an example
$statement = $dbh->prepare("INSERT INTO USERS (USERNAME) VALUES ?");
$statement->execute(array($_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
(不推荐)
<?php
// A security hole, because if register_globals is on, the value for user_authorized
// can be set by a user sending them on the query string
// (i.e., http://www.example.com/myscript.php?user_authorized=true)
if ($user_authorized) {
// Show them everyone's sensitive data...
}
?>
|
如果您的 PHP 代码使用了全局变量,那么应该更新它。即便不是为了使用新版本的 PHP 而更新它,从安全角度考虑,您也应该进行更新。更新完成之后,您的代码应该类似于清单 5。
清单 5. 更加明确的代码(推荐)
<?php
function is_authorized() {
if (isset($_SESSION['user'])) {
return true;
} else {
return false;
}
}
$user_authorized = is_authorized();
?>
|
register_long_arrays
当打开 register_long_arrays
设置时,它将注册 $HTTP_*_VARS
预定义变量。如果您目前使用更长的变量,那么需要进行更新,以适应更短的变量。这个设置是在 PHP V5 中引入的(考虑到向后兼容性),但出于性能考虑,PHP 团队建议关闭它。清单 6 是一个使用 register_long-arrays
的例子。
清单 6. 使用注册数组(不推荐)
<?php
// Echo's the name of the user value given on the query string, like
// http://www.example.com/myscript.php?username=ngood
echo "Welcome, $HTTP_GET_VARS['username']!";
?>
|
如果您的 PHP 代码类似于清单 6,那么更新它,如清单 7 所示。如果 register_long_arrays
设置是打开的,那么关闭它,然后再次测试脚本。
清单 7. 使用 $_GET
(推荐)
<?php
// Using the supported $_GET array instead.
echo "Welcome, $_GET['username']!";
?>
|
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,并确保您的应用程序不受这些变更的影响。您还可以利用这次机会清理自己的脚本,删除本文不推荐使用的函数,
或更新您的语法以确保应用程序受支持。
文章来源:http://www.ibm.com/developerworks/cn/opensource/os-php-future/
分享到:
相关推荐
业务呼唤转型,技术驱动创新,智慧启迪未来:城市交通一体化解决方案.pdf
1.1.2 PHP的发展现状与未来展望 3 1.1.3 PHP语言的优势 3 1.1.4 相关资源及自学提示 4 1.2 PHP的应用范围及案例 5 1.2.1 PHP可以做什么 5 1.2.2 PHP擅长的几个领域及产品介绍 5 1.2.3 PHP不适合做什么 6 1.2.4 其他...
ImageMagick是用于php开发图片使用的第三方插件,他提了很多的api接口,对文字有很好的处理包括渐变色、阴影效果、文字翻转、图像特殊效果,功能相当于mini版的ps
■两个框架都处于积极的开发状态并且它们会在未来的一段时间内完全被支持 Kohana2x和3.x的主要不同点是? 两个框架有他们自己的开发团队和日标 ■ Kohana2.x使用MC设计模式,而 Kohana3.x使用HMVC设计模式 Ohana2.x是...
销售统计、排行榜、会员统计等,更多功能,未来的版本会加入 限时抢购等促销活动功能 等等... 云EC是一套免费、开源的系统。但安装、使用、拥有之前,请务必遵守我们软件的一些使用协议: 1、严禁去除云EC相关的...
继续填写调查表,为Elastic提供您的意见并帮助塑造代理商的未来!文献资料例子捕捉可投掷跨度母公司交易指标集获取服务器信息分布式跟踪将debug_backtrace转换为堆栈跟踪 测验vendor/bin/phpunit 贡献者非常感谢这...
登录家删除帐号如何安装转到App / Connection.php并插入数据库信息,作为主机,数据库名称,登录名和密码。 默认情况下是: $host = "localhost";$db = "login";$user = "root";$pass = "";创建一个名为$ db的数据库...
然后转到创建的目录并编译扩展名。 必须安装PHP开发包(命令phpize必须可用)。 cd php-rsa phpize ./configure make sudo make install 最后,需要将以下行添加到php.ini extension=rsa.so 原料药 该API未记录。 ...
描述 通常需要显示类似项目的列表。 例如,目录中的产品列表或搜索结果列表等。... 也许在未来的版本中将默认设置俄语方案。 示例 示例 1 use Paged \ Facade ; require_once 'Facade.php' ; // устанавл
本书将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子。. 2012年是O2O元年,无论是成熟的...
CommonMark的8折手风琴受到和所描述的可访问的手风琴模式的(并为有希望的未来做准备,其中或其他某些本地元素是答案),这种扩展与集中模式一样重要。安装composer require 8fold/commonmark-accordions用法|+ ## ...
八度志愿活动管理系统 bAduVEMS是一款基于PHP mysql技术架构的志愿服务管理系统,积十年经验精心策划研发,专为公益组织提供志愿服务工作无纸化办公系统解决方案,不仅能够帮助现有的网站进行资讯系统升级换代,也...
转到“ ” 这会将属性数据导入数据库。 路线: / admin / properties / admin / properties / create / admin / properties / {id} / edit / admin / properties / {id} /删除 / admin / properties / import...
比如还有php、甚至是支持转编译成 鸿蒙 应用。 AMixStudio由广西猎码软件科技有限公司自主研发的,专门用于AMix项目开发的专业IDE。相比于旧版猎码的开发工具,无论是界面美观程度,还是功能上都有质的提升。...
皮皮影视采集程序PiPiCMS,是一款基于PHP MySQL的电影采集程序。 皮皮影视采集程序PiPiCMS 1.3h utf8 更新...未来短期内我们将完成会员模块,并实现与Ucenter通信,站长可轻松建立一个用户粘性极高,且多样性的网站。
皮皮影视采集程序PiPiCMS,是一款基于PHP MySQL的电影采集程序。 皮皮影视采集程序PiPiCMS 1.3h gbk 更新...未来短期内我们将完成会员模块,并实现与Ucenter通信,站长可轻松建立一个用户粘性极高,且多样性的网站。
第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会; 第二:新知识肯定会有很多新概念,尝试理解和接受,您才可能提高。不要害怕和逃避,毕竟我们...
计划未来 保存为JSON,CSV和XML文件 支持使用CSS选择器查询 支持查询JSON 能够保持信息和跟踪原子变化的能力 可能的用途 跟踪搜索排名 间谍竞争对手网站 刮擦优惠券网站 将网站抓取为自己的汇总网站 从大型静态网站...
#未来范围: 可以自定义手写上载。 可以很好地实现同时上传多个文件和同时下载多个文件的数据库。 #Web应用程式程式码档案: index.html index.css upload.php download.php #如何设置: 将我的存储库...
这个软件包是我对PHP开发的未来的愿景。 它是在考虑了后端/ CRUD应用程序的情况下创建的,但将适用于任何类型的应用程序。 它还具有诸如自动路由和迁移之类的有用功能,可加快您的速度并降低代码抽象度。 为了最好...