PHP版本的讲解

原文地址:http://dev.meettea.com/show-90-1.html

最近发现很多PHP程序员对PHP版本知识了解不是很清楚,其中不乏PHP产品主力开发人员。

PHP版本主要分三支:PHP4/PHP5/PHP6
其中,PHP4由于太古老、对OO支持不力已基本被淘汰,就不在详述。
而PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,所以也不详述。

PHP5的版本主要分三支:PHP5.2之前的版本、PHP5.2.X和PHP5.3
那我们应该如何选择适用自己项目的版本呢?
PHP5.2之前的版本不值得考虑,因为某些功能缺陷或者BUG。
主流PHP程序对PHP5.2.X的兼容性最好,而每次版本号的升级带来的都是安全性和稳定性的改善,所以宜挑选最新的版本。目前PHP5.2系列最新的是PHP5.2.14
而如果产品是自己开发自己使用,PHP5.3在某些方面更具优势,在稳定性上更胜一筹,增加了很多PHP5.2所不具有的功能,比如内置php-fpm、更完善的垃圾回收算法、命名空间的引入、sqlite3的支持等等,是部署项目值得考虑的版本。

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

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 binarieshttp://dev.meettea.com

我该选择哪个版本?
如果你在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方式运行的时候选择这个版本,具有更好的性能。
下面给点资料,来源于 http://koda.javaeye.com/blog/662034
从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

另外,顺带讲讲windows下比较简洁方便的PHP配置方法,网上教的什么复制php.ini到windows目录、复制xxxxx.dll到system32下,太丑陋了。
1、下载zip版本的PHP
2、下载好相应的扩展,修改好php.ini,添加模块映射
3、环境变量里PATH加上PHP存放的目录。只要一个就够了,/bin和/ext不需要加。
4、环境变量里定义一个PHPRC变量,内容为PHP.INI的存放路径。
完毕。很多文章提及需要重启系统,可是从我遇上的情况来看,并无必要,最多重启web服务。

如果你是linux下用,就无视本文吧。
修订: 2010-11-03

  1. 看了白菜(aiyooyoo.com)的修订,IIS安装php-cgi,3、4两步可以省略,ISAPI方式需要。
  2. 起名叫windows下的PHP版本的讲解更合适

At Last,近期思考了很多东西,若整理成文又欠缺深度和力度,还需厚积薄发。

时间: 2024-10-07 15:18:53

PHP版本的讲解的相关文章

IIS6、IIS7和IIS8各版本的差别

一.写在前面 目前市面上所用的IIS版本估计都是>=6.0的.所以我们主要以下面三个版本进行讲解 服务器版本 IIS默认版本 server2003 6.0 server2008 7.0 server2012 8.0 二.IIS6的请求过程 由图可知,所有的请求会被服务器中的http.sys组件监听到,它会根据IIS中的 Metabase 查看基于该 Request 的 Application 属于哪个Application Pool, 如果该Application Pool不存在,则创建之.否则

IIS各个版本中你需要知道的那些事儿

一.写在前面 目前市面上所用的IIS版本估计都是>=6.0的.所以我们主要以下面三个版本进行讲解 服务器版本 IIS默认版本 server2003 6.0 server2008 7.0 server2012 8.0 二.IIS6的请求过程 由图可知,所有的请求会被服务器中的http.sys组件监听到,它会根据IIS中的 Metabase 查看基于该 Request 的 Application 属于哪个Application Pool, 如果该Application Pool不存在,则创建之.否则

IIS6、IIS7和IIS8各版本的差别是什么?

一.写在前面 目前市面上所用的IIS版本估计都是>=6.0的.所以我们主要以下面三个版本进行讲解 服务器版本   IIS默认版本 server2003          6.0 server2008          7.0 server2012          8.0 二.IIS6的请求过程 由图可知,所有的请求会被服务器中的http.sys组件监听到,它会根据IIS中的 Metabase 查看基于该 Request 的 Application 属于哪个Application Pool, 如

Spark版本定制版3-通过案例对SparkStreaming透彻理解三板斧之三

本讲内容: a. Spark Streaming Job 架构和运行机制 b. Spark Streaming Job 容错架构和运行机制 注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解. 上节回顾: 上节课谈到Spark Streaming是基于DStream编程.DStream是逻辑级别的,而RDD是物理级别的.DStream是随着时间的流动内部将集合封装RDD.对DStream的操作,归根结底还是对其RDD进行的操作. 如果将Spark Stre

玩转ArduinoJson库 V6版本

1.前言 ????前面,博主已经讲解了ArduinoJson库的V5版本.为了节省时间以及不讨论重复内容,博主建议读者先去阅读一下 玩转ArduinoJson库 V5版本 .重点了解几个东西: JSON协议 JsonBuffer JsonObject JsonArray ????接下来,我们直接进入V6版本的学习,尽量和V5版本类比. 2.ArduinoJson V6版本 ????假设读者下载的V6版本的,那么可以参考 这里 的API说明.读者需要注意一下JsonDocument(可类比V5版本

WPF PRISM开发入门一

这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识.目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码.这个系列的博客将选择PRISM 4.1版本来讲解.可以从微软官网上下载到PRISM 4.1相关内容.将下载下来的文件解压开: 新建一个WPF解决方案如下: 解决方案中包含两个工程,GetStartedPrismWPF是一个WPF项目,GetStartedPrismWPF.MainModule是一个类库项目.这两个项目中都同时添加下面P

Git 本地仓库(Repository)详解

大纲: 一.前言 二.概述 三.在Windows上安装Git 四.创建本地仓库 五.本地仓库管理详解 六.总结 注,测试机 CentOS 5.5 x86_64,Git 服务器版本:git version 1.8.2.1,客户端版本:git version 1.9.2.msysgit.0.所有软件请到这里下载:http://msysgit.github.io/. 一.前言 本来呢,其实呢.我以为Git也就几个命令,没什么难的.于是就到网上找了些文章看看,发现这些文章难得不知道该说什么好.不是简单的

微服务

微服务 前言 微服务,顾名思义就是微小的单一的服务程序,单一流程,单一发布,开发和部署都可独立: 这是我的理解: 但基于web的服务,不管是webservice还是webapi等类似的服务都需要基于iis或者tomcat, 本文介绍重点绕过iis或tomc部署基于http服务明文程序: 所谓明文程序就是源码发布:当然你也可以不必是源码发布,这个可以个人需求: 序言 请不要问我为什么不直接使用web现成的架构,进行开发部署, 第一:我的项目有这样的需求:原本就是一个服务程序,提供socket tc

关于《Unity3D/2D游戏开发从0到1》书籍再版说明

关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于Unity4.6版本的教学知识体系,则略显滞后.    随着2017年7月份,Unity2017.1正式版本的推出,<Unity3D/2D游戏开发从0到1>书籍的再版,则正式提上日程. 目前2017年8月份再版工作已经进行过半,现在给各位小伙伴汇报一下工作,希望得到更好的建议.现在说说第二版本的总体