主页
软件技术
返回
php版本比较

PHP的大版本主要分三支:PHP4/PHP5/PHP6

其中,PHP4由于太古老、对OO支持不力已基本被淘汰,请无视PHP4。

PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,很多功能已在PHP5.3.3上实现,所以也不详述,请无视PHP6。

PHP5的版本主要分四支:PHP5.2之前的版本、PHP5.2.X、PHP5.3和日前发布的PHP5.4。

那我们应该如何选择适用自己项目的版本呢?

PHP5.2之前的版本不值得考虑,因为某些功能缺陷或者BUG, PHP5.2之前的版本。PHP5.4还处于Beta试用的版本号,非稳定版本,请无视PHP5.4。

主流PHP程序对PHP5.2.X的兼容性最好,而每次版本号的升级带来的都是安全性和稳定性的改善,所以宜挑选最新的版本。目前PHP5.2系列最新的是PHP5.2.17。

而如果产品是自己开发自己使用,PHP5.3在某些方面更具优势,在稳定性上更胜一筹,增加了很多PHP5.2所不具有的功能,比如内

置PHP-fpm、更完善的垃圾回收算法、命名空间的引入、sqlite3的支持等等,是部署项目值得考虑的版本,强烈推荐PHP5.3.3。

除了版本号的不同,同一版本号的PHP版本也有区别,并且在选择PHP扩展的时候需要注意。

?install版:可执行的MSI格式安装包。

?ZIP版:解压即可用,与install版无区别。建议选择ZIP版。?DEBUG版:请无视。

VC6与VC9

对于VC6还是VC9版本的选择,PHP官方网站有详细的描述,原文如下:

Which version do I choose?

If you are using PHP with Apache 1 or Apache2 from Apache.org you need to use the VC6 versions of PHP

If you are using PHP with IIS you should use the VC9 versions of PHP

VC6 Versions are compiled with the legacy Visual Studio 6 compiler

VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86)

or the Microsoft 2008 C++ Runtime (x64) installed

Do NOT use VC9 version with Apache.org binaries

我该选择哪个版本?

如果你在Apache1或者Apache2下使用PHP,你应该选择VC6的版本

如果你在IIS下使用PHP应该选择VC9的版本

VC6的版本使用visual studio6编译

VC9使用Visual Studio 2008编译,并且改进了性能和稳定性。VC9版本的PHP需要你安装Microsoft 2008 C++ Runtime

不要在Apache下使用VC9的版本TS和NTS

TS指Thread Safety,即线程安全,一般在IIS以ISAPI方式加载的时候选择这个版本。

NTS即None-Thread Safe,一般以fast CGI方式运行的时候选择这个版本,具有更好的性能。

从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因

此在IIS下CGI模式才是PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。

为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。

因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。

如何查看当前运行的PHP的版本?一个很简单的办法就是phpinfo();

Thread Safety disabled是NTS,enabled是TS

Configure Command看到VC98字样的是VC6,Compiler标明MSVC9 (Visual C++ 2008) 的是VC9

在WIN7下:IIS7+NTS+FastCGI+vc9 是最佳搭档或者Apache+fastcgi+nts+vc6。

在WINXP下:Apache+TS+Apache module +vc6最合适的搭档。

PHP语言简介

PHP 独特的语法混合了C、Java、Perl 以及PHP 自创新的语法。它可以比CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML 文档中去执行,执行效率比完全生成HTML标记的CGI要高许多; PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP 都能实现,而且支持几乎所有流行的数据库以及操作系统。最重要的是PHP可以用C、C++进行程序的扩展!

特性

1、开放的源代码:

所有的PHP源代码事实上都可以得到。

2、PHP是免费的。

和其它技术相比,PHP本身免费。

3、php的快捷性

程序开发快,运行快,技术本身学习快。嵌入于HTML:因为PHP可以被嵌入于HTML语言,它相对于其他语言,编辑简单,实用性强,更适合初学者。

4、跨平台性强:

由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS下。

5、效率高:

PHP消耗相当少的系统资源。

6、图像处理:

用PHP动态创建图像

7、面向对象:

在PHP4,php5 中,面向对象方面都有了很大的改进,现在php 完全可以用来开发大型商业程序。

8、专业专注:

PHP支持脚本语言为主,同为类C语言。

技术应用

1,伪静态

2,静态页面生成

3,数据库缓存

4,过程缓存

5,div+cssw3c标准

6,大负荷

7,分布式

8,jquery框架集成

9,flex

10,桌面程序应用(不擅长)

11,支持MVC模型

PHP3

PHP3跟Apache服务器紧密结合的特性,加上它不断的更新及加入新的功能,而且几乎支持所有主流与非主流数据库,再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000。加上它的源代码完全公开,在Open Source意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新的活力,使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。

PHP4

PHP4.0整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求。在最佳化之后的效率,已较传统CGI或者ASP等程

序有更好的表现。而且还有更强的新功能、更丰富的函数库。无论您接不接受,PHP 都将在Web CGI 的领域上,掀起巅覆性的革命。对于一位专业的Web Master 而言,它将也是必修课程之一。

PHP 4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比PHP 3.0要快,其脚本描述更强大并且更复杂, 最显著的特征是速率比的增加。PHP4.0这些优异的性能是PHP 脚本引擎重新设计产生的结果:引擎由AndiGutmans 和Zeev Suraski从底层全面重写。PHP4.0 脚本引擎——Zend引擎,使用了一种更有效的编译——执行方式, 而不是PHP 3.0 采用的执行——当解析时模型。

PHP4的优越性:

PHP4在3.0版的基础上增加或增强了许多有用的特征,主要如下:

(1)别名:在PHP4中,可以利用引用为变量赋值,这给编程带来了很大的灵活性。

(2)扩充了API模块:PHP 4.0 为扩展的API 模块的提供了扩展PHP接口模块, 它比旧的API 版本显著地快。PHP 模块已有的及最常用的接口多数被转换到使用这个扩展的接口。

(3)自动资源释放:PHP4增加了引用计数功能,这种新技术的引入使PHP4具有了自动内存管理功能,减轻了开发人员的负担。

(4)布尔类型:PHP 4.0 支持布尔类型。

(5)进程生成:在UNIX 环境下的PHP 4.0 提供了一个很智能和通用的生成进程, 使用了一种名为基于automake/libtool的系统生成技术。

(6)COM/DCOM 支持:PHP 4.0 提供COM/DCOM 支持( 仅用于Windows 环境) 可以无缝地存取和访问COM 对象。

(7)与PHP 3.0 兼容性很好:PHP 4.0 是与PHP 3.0 代码向后兼容性接近100% 。由于PHP 4 的改进的体系结构,两者有一些细微的差别,但是大多数人将可能永远不可能遇上这种情况。

(8)配置:PHP4重新设计和增强了PHP.ini文件,这使得用PHP.ini来配置PHP显得极为容易,这个文件可以在运行时被Apache(unix系统)或由Windows 注册(Windows 环境)。

(9)加密支持:PHP4实现了完整的加密, 这些加密功能是一个完整的mycrypt库,并且PHP 4.0 支持哈希函数。Blowfish, TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。

(10)类型检查:PHP 4.0 支持同一操作符用于评类型检查:

===(3 等号运算符), 为在两个值和其类型之间作检查。例如, '3' ===3 将视为假( 类型是不同的), 而3 ==3 ( 相等判断) 将视为真。

(11)FTP 支持:PHP 4.0 支持FTP 。通常, 你会为通过一个调制解调器连接下载一个大文件提供一个接口。然而, 如果你确实有需要,可以使用PHP 。

(12)PHP4新增函数或功能增强函数:PHP 4.0 新增了许多函数,同时也将许多现有的函数功能进行了增强,以下是一些例子。array_count_values() eval() foreach() include() ob_end_clean()

ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()

(13)here打印:PHP 4.0 的Here打印是与Perl类似的, 尽管完全不相同。Here是打印大容量文章的一个有用的方法,例如在HTML文件中,不会漏掉任何一个字符,例如目录标记。

(14)HTTP Session fallback 系统:为HTTP Session管理的一个fallback 系统在PHP 4.0被实现。缺省情况下,Session标识符由cookies存储。如果没有cookies支持或一项cookies任务失败,Session标识符自动被创建并在URL 的查询字符串中被携带。

(15)ISAPI 支持:PHP 4.0 能作为一个个性化的ISAPI 模块作为IIS插件。这比PHP 3.0 更有效, 它作为一个外部的程序来运行。

(16)内存:PHP 4.0 能更有效的使用内存, 导致较少的内存占用消耗,这主要归功于引用计数技术的实现。

(17)其他类成员函数:在PHP 4.0 你能在成员函数本身的作用域或全局范围内调用其他类的成员函数。例如,你能用一个子函数覆盖父函数,并在子函数中调用父函数。

(18)多维数组:在PHP 4.0 ,利用GET,POST,Cookies的进行的数据传输支持多维数组。

(19)个性化的HTTP Session支持:HTTP Session处理, 包括fallback 系统管理,在PHP 4.0被它的新库函数实现。在版本3.0 中处理Session要求使用PHPLIB 和第三方的库函数, 它比把Session直接地由PHP 支持慢了许多。

(20)个性化的Java 支持:PHP 4.0 支持和java的交互。这种个性化的Java 支持为PHP 在Java 对象上创建和使用方法提供一个简单并且有效的工具。

(21)对象和数嵌套组:PHP 4.0 实现了功能更加强大的对象, 移去了PHP 3.0存在的种种句法限制。对象能在数组以内被嵌套并且反过来也如此, 可以根据你的需要实现嵌套。

(22)面向对象的编程:PHP 4.0 为面向对象的编程和构造类及对象提供扩展的功能和新特征。PHP4实现了对象重载,引用技术等新技术。

(23)对象重载支持:对象重载语法允许第三方的基于面向对象的类库使用PHP4 的面向对象的特征存取他们自身的功能。使用这个特征的一个COM 模块已经被实现了。

(24)输出缓冲支持:PHP 提供了一个输出缓冲函数集合。输出缓冲支持允许你写包裹函数功能压缩缓冲区。在PHP4 的输出缓冲支持允许HTML 头信息存放, 无论HTML的正文是否输出。头信息( header(), content type, and cookies ) 不采用缓冲。

(25)增加了PCRE 库:PHP 4.0 包括一个Perl 兼容的正则表达式(PCRE ) 库, 和正常regex库一起与PHP 绑定。split 和replace PCRE 功能被支持。PCRE 和Perl 正规表达式之间有一些细微差别。

(26)PHP.ini 文件:PHP.ini文件在PHP4.0 被重新设计, 使用的PHP 的配置PHP.ini是更容易并且更有效的。全部文件能被Apache 在运行时间操作( 在Apache环境下) 或由Windows 注册表( 在Windows 下面) 。被加入PHP.ini文件的配置指令自动地在所有相关的模块中被支持。

(27)引用计数:PHP 4.0 为系统中的每个数值提供了引用计数, 包括资源。一旦一个资源不再被任何变量引用,它自动地被释放以节省内存资源。利用这个特征的最明显的例子一个内置SQL查询的循环语句。在PHP 3.0中,每次递归另外的SQL 结果集合重复申请内存,直到脚本执行完毕,这些结果集合占用的内存才被释放。

(28)支持引用:通过引用可以改变一个变量的值。

(29)函数的运行时绑定:PHP 4.0 的运行时间绑定功能允许你在他们被声明以前调用, 无论声明是否在代码以后或是在运行时间。

(30)类的运行时信息:PHP 4.0 支持在运行时刻存取下列类信息:一个对象的类名,一个对象的父类的类名字,以及对象函数所在的名字。

(31)服务器抽象层:为支持Web服务器提供了增强型SAPI ( 服务器API ) 接口,是PHP 4.0 不可分的一部分。这个服务器抽象层,提供了通用的WEB服务器接口支持,支持多线程WEB服务器,为大多数的WEB服务器提供透明的支持, 这些服务器包括

Apache ,IIS ( ISAPI ), 以及AOL 服务器。

(32)语法的点亮显示:PHP 4.0 语法的点亮显示允许开发者看见源代码而不是脚本, 这个功能比PHP 3.0中的更有效。它跑得更快,更执行得更好,并且产生更紧凑的HTML代码。

(33)由引用改变变量的值:PHP 4.0 由引用支持可变的赋值, “关联”的2个变量之中个的任何一个的值被改变,另外的变量的值同样被改变,这类似与C中的指针类型。

(34)在引用字符串中的变量引用:PHP 4.0 增强了在引用字符串中的变量引用。

PHP5

PHP5在长时间的开发及多个预发布版本后,2004年7月13日, PHP5.0发布。该版本以Zend引擎Ⅱ为引擎,并且加入了新功能如PHP Data Objects(PDO)。现在PHP5.0版本强化更多的功能。首先,完全实现面向对象,提供名为PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直观地访问XML数据、名为SimpleXML的XML处理用界面。同时还强化了XMLWeb服务支持,而且标准支持SOAP扩展模块。数据库方面,PHP新版本提供旨在访问MySQL的新界面——MySQL。除此前的界面外,还可以使用面向对象界面和预处理语句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上还捆绑有小容量RDBMS-SQLite.

1、新的对象模式(New Object Mode)

PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于Java。本小节着重讲述PHP5 中新的对

象模式,并举了一些较简易的例子来说明。就让本节成为你的PHP5 之旅的一个新起点吧。:)

* 构造函数和析构函数

* 对象的引用

* 对象的克隆

* 对象中的私有、公共及受保护模式

* 接口(Interfaces)

* 抽象类

* __call

* __set 和__get

* 静态成员

构造函数和析构函数

在PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在PHP4 中没有析构函数的概念。

在PHP5 中,构造函数被统一命名为__construct,并且引入了析构函数的概念,被统一命名为__destruct。

对象的引用

在PHP4中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号“&” 来声明是要做一个引用,而不是一个Copy。在PHP5中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。

对象的克隆

当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为__clone。

对象中的私有、公共及保护模式

PHP4 中,一个对象的所有方法和变量都是公共的,这意味着你可以在一个对象的外部操作其中的任意一个变量和方法。PHP5 引入了三种新的用来控制这种存取权限的模式,它们是:公共的(Public)、受保护的(Protected)及私有的(Private)。

公共模式(Public):允许在对象外部进行操作控制。

私有模式(Private):只允许本对象内的方法对其进行操作控制。

受保护模式(Protected):允许本对象及其父对象对其进行操作控制。

接口(Interfaces)

PHP4中的对象支持继承,要使一个对象成为另一个对象的派生类,你需要使用类似“class foo extends parent” 的代码来控制。PHP4 和PHP5 中,一个对象都仅能继承一次,多重继承是不被支持的。不过,在PHP5中产生了一个新的名词:接口,接口是一个

没有具体处理代码的特殊对象,它仅仅定义了一些方法的名称及参数,此后的对象就可以方便的使用'implement' 关键字把需要的接口整合起来,然后再加入具体的执行代码。

这对提高代码的可读性及通俗性有很大的帮助,通过上面的例子可以看到,对象foo 包含了displayable 和printable 两个接口,这时我们就可以清楚的知道,对象foo 一定会有一个display() 方法

和一个print() 方法,只需要去了解接口部分,你就可以轻易的操作

该对象而不必去关心对象的内部是如何运作的。

抽象类

抽象类不能被实例化。

抽象类与其它类一样,允许定义变量及方法。

抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。

__call

PHP5 的对象新增了一个专用方法__call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法, __call 方法将会被自动调用。

__set 和__get

这是一个很棒的方法,__set 和__get 方法可以用来捕获一个

对象中不存在的变量和方法。

类型指示

在PHP5 中,你可以在对象的方法中指明其参数必须为另一个对象的实例。

静态成员

静态成员和静态方法在面象对象编程的术语中被称作“类方法(class methods)” 和“类变量(class variables)”。

“类方法” 在一个对象没有实例化前允许被调用。同样,“类变量” 在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。

2、异常处理(Exceptions)

异常处理是公认的处理程序错误的理想方法,在Java 及C 中都有这个概念,我们欣喜的看到,在PHP5 已经加入了这方面的应用。你可以尝试使用“try”和“catch” 来控制程序的错误。当有错误发生的时候,代码会把错误交给“catch” 子句来处理,在“catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理。

自定义错误处理

你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个getMessage 方法。

3、名称空间(Namespace)

名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。

例:名称空间

<?PHP

namespace Math

{

class Complex

{

//...code...

function __construct()

{

print("hey");

}

}

}

$m = new Math::Complex(); ?>

注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。

PHP6设想

1.支持Unicode

支持Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的。另外一点,PHP也可以在.ini文件中设定是否开启支持Unicode,决定权在你自己,这是一个不错的点子,关掉Unicode 的支持,PHP的性能并不会有大幅度的提升,主要的影响在于需要引用字符串的函数。.

2.Register Globals 将被移除

这是一个重要的决定,许多新进的PHP开发者会觉得Register Globals蛮方便的,但是却忽略了Register Globals会带来程序上安全性的隐患,大多数的主机上此项功能是关闭的,印象PHP4.3.x版开始时,此项默认设置值即是关闭状态,PHP6正式移除Register Globals也代表着如果程序是由PHP3时代的产物,将完全无法使用,

除了改写一途外,别无他法。相信现在的PHP世界里,仍使用PHP3时代所产生的程序应该是少之又少。

3.Magic Quotes 将消失

Magic Quotes主要是自动转义需要转义的字符,此项功能移除也符合大多数PHP开发者的心声。

4.Safe Mode 取消

老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到

5.'var' 别名为'public'

在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,PHP6现在也可以称作为OO语言了。

6.通过引用返回将出错

现在透过引用返回编译器将会报错例如$a =& new b()、function &c(),OO语言默认就是引用,所以不需要再使用&了。7.zend.ze1 compatbility mode 将被移去

Zend.ze1相容模式将被移去,PHP5是为兼容旧有PHP4,所以在.ini中可选择是否开启相容模式,原因在于PHP5使用的是第二代

解析引擎,但是相容模式并不是百分之百能解析PHP4语法,所以旧时代的产物,移除。

8.Freetype 1 and GD 1 support 将不见

这两个是很久的Libs,所以不再支持,GD1早已被现在的GD2取代了。

9.dl() 被移到SAPI 中

dl()主要是让设计师加载extension Libs,现在被移到SAPI 中10.Register Long Array 去除

从PHP5起默认是关闭,再PHP6中正式移除。

11.一些Extension的变更

例如XMLReader 和XMLWriter将不再是以Extension的方式出现,他们将被移入到PHP的核心之中,并且默认是开启, eregextension将被放入PECL,代表着它将被移出PHP核心,这也为了让路给新的正则表达式extension,此外,Fileinfoextension 也将被导入PHP的核心之中。

12.APC将被导入核心

这是一个提高PHP性能的功能,现在它将被放入PHP核心中,并且可以选择是否启用APC

13.告别ASP风格的起始标签

原来是为了取悦ASP开发者转向使用PHP,现今已经不再需要这种做法了

扩展阅读:

1 PHPChina:

2 PHP官方网站

3 php技术资源

4 PHP教程:

5 WEB安全性-2010_OWASP_TOP10:


建筑工程:浅析项目管理在公路勘察设计中的应用
一级建造师考试《市政公用工程》精华辅导(132)
2015二级建造师最新辅导书7折优惠
土地整理项目融资PPP模式
行业专家:你认识云存储吗?
时评:住宅产业化需房企转变思路 技术管理要兼顾
时评:国民该如何提高建筑文化素养
单志广:智慧城市被热捧的质疑和难题
信息发布:名易软件http://www.myidp.net