PHP多个版本的分析解释


Posted in PHP onJuly 21, 2011

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,近期思考了很多东西,若整理成文又欠缺深度和力度,还需厚积薄发。

PHP 相关文章推荐
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
php中上传文件的的解决方案
Sep 25 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
Laravel 读取 config 下的数据方法
Oct 13 PHP
QQ登录 PHP OAuth示例代码
Jul 20 #PHP
模板引擎正则表达式调试小技巧
Jul 20 #PHP
php中批量替换文件名的实现代码
Jul 20 #PHP
关于php连接mssql:pdo odbc sql server
Jul 20 #PHP
PHP mcrypt可逆加密算法分析
Jul 19 #PHP
PHP中date()日期函数有关参数整理
Jul 19 #PHP
php URL验证正则表达式
Jul 19 #PHP
You might like
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
php生成QRcode实例
2014/09/22 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
创业计划书怎样才能打动风投
2014/01/01 职场文书
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python