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

(0)

相关推荐

  • 教你在header中隐藏php的版本信息

    前言 在php渲染的网页header信息中,会包含php的版本号信息,比如: X-Powered-by: php/5.3.3,这有些不安全,有些黑客可能采用扫描的方式,批量寻找低版本的php服务器,利用php漏洞(比如hash冲突)来攻击服务器. php.ini中有一个选项可以控制是否暴露这个信息,那就是: expose_php = On 默认值是On,改成Off之后,就不会显示php版本信息啦. 或者在php-fpm的pool配置文件中设置: php_admin_flag[expose_php

  • 在Linux系统的服务器上隐藏PHP版本号的方法

    通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP.PHP 是如今流行的服务端html嵌入式语言(之一?).在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞.因此,我会简单描述如何在Linux服务器中隐藏PHP信息. 默认上expose_php默认是开的.关闭"expose_php"参数可以使php隐藏它的版本信息. [root@centos66 ~]# vi /etc/php.ini 在你的php.ini, 定位到含有expose_php的那行把O

  • 隐藏Nginx或Apache以及PHP的版本号的方法

    当黑客入侵一台服务器时,首先会"踩点", 这里的"踩点",指的是了解服务器中运行的一些服务的详细情况,比如说:版本号,当黑客知道相应服务的版本号后,就可以寻找该服务相应版本的一些漏洞来入侵,攻击,所以我们需要隐藏这些版本号来避免一些不必要的问题 我们来测试一下 insoz:~ insoz$ curl -I http://127.0.0.1/phpinfo.php HTTP/1.1 200 OK Server: nginx/1.5.0 Date: Thu, 18 Ju

  • PHP版本如何选择?应该使用哪个版本?

    超过75%的网站使用了PHP作为开发语言,wordpress,phpmyadmin和其他一些开源项目的盛行,带来了一大批的长尾用户.然而,他们一般安装之后却很少升级.下图是目前PHP的使用统计. 惊人的是,此图的左半部分表示已经不被支持的PHP版本.PHP 5.2早在2011年1月已经不再维护.这并不意味着你就不能使用它,但是这意味着某些安全更新,你就无法跟进了.一些发行版将尝试修复一些BUG,但你的PHP版本似乎有点乏善可陈,因为,你正在使用的是2006年的过时技术. 该从哪里开始 已经没有人

  • nginx/apache/php隐藏http头部版本信息的实现方法

    1.nginx隐藏头部版本信息方法 编辑nginx.conf配置文件,在http{}内增加如下一行 复制代码 代码如下: http {      --      server_tokens off;      --     } 编辑php-fpm配置文件,fastcgi.conf或fcgi.conf 找到: 复制代码 代码如下: fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 改为: 复制代码 代码如下: fastcgi_param SER

  • PHP 线程安全与非线程安全版本的区别深入解析

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

  • PHP5各个版本的新功能和新特性总结

    本文目录:PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束PHP5.2:JSON 支持PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,PharPHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改PHP5.5:yield, list() 用于 foreach, 细节修改PHP5.6: 常量增强,可变函数参数,命名空间增强 一.PH

  • PHP多个版本的分析解释

    PHP版本主要分三支:PHP4/PHP5/PHP6其中,PHP4由于太古老.对OO支持不力已基本被淘汰,就不在详述.而PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,所以也不详述. PHP5的版本主要分三支:PHP5.2之前的版本.PHP5.2.X和PHP5.3那我们应该如何选择适用自己项目的版本呢?PHP5.2之前的版本不值得考虑,因为某些功能缺陷或者BUG.主流PHP程序对PHP5.2.X的兼容性最好,而每次版本号的升级带来的都是安全性和稳定性的改善,所以宜挑选最新的版本.目前P

  • Unicode详细分析解释

    可以任意转载,但转载时必须标明原作者charlee.原始链接http://tech.idv2.com/2008/02/21/unicode-intro/以及本声明 基本知识 字节和字符的区别 Big Endian和Little Endian UCS-2和UCS-4 UTF-16和UTF-32 UTF-16 UTF-32 UTF-8 基本知识 介绍Unicode之前,首先要讲解一些基础知识.虽然跟Unicode没有直接的关系,但想弄明白Unicode,没这些还真不行. 字节和字符的区别 咦,字节和

  • PHP的开发框架的现状和展望

    PHP开发框架的现状和展望 /google 的广告条--> 引言: 随着Ruby on Rails的火爆,PHP这个流行的Web应用脚本语言也出现了大量的新一代开发框架.与此同时,国内PHP开发者也开始紧跟国外发展,推出了不同的开发框架. Ruby on Rails催生变革 在RoR流行之前,PHP领域也有不少开发框架,例如Mojavi.WACT.PHPMvc和Seagull等.这些框架虽然也采用了MVC模式.数据库抽象层等技术.但由于当时PHP本身不像现在这样流行,所以这些框架都没有得到大量应

  • vue-cli2.x旧版本卸载不掉的问题踩坑指南(附Vue脚手架安装教程)

    目录 旧版本卸载 问题说明 问题解释 问题解决 总结 旧版本卸载 问题说明 vue2.x脚手架旧版本卸载不掉的问题:(卸载命令运行后输入vue --version仍一直显示旧版本) 问题解释 首先明确一点,卸载不掉肯定说明你的电脑中至少有两个地方存在脚手架,而你的卸载操作只是卸载了其中之一.而出现这个情况的原因,一般来说是你在npm的默认路径下安装过脚手架,在配置了npm全局安装路径之后又安装过脚手架,所以有两个脚手架.(顺带一提,这样的情况提示的都是默认安装路径下的vue脚手架版本) 问题解决

  • Android实现微信朋友圈发本地视频功能

    一.前言 前一篇文章已经详细介绍了如何使用Xposed框架编写第一个微信插件:摇骰子和猜拳作弊器 本文继续来介绍如何使用Xposed框架编写第二个微信插件,可以将本地小视频发布到朋友圈的功能.在这之前我们还是要有老套路,准备工作要做好,这里还是使用微信6.3.9版本进行操作,准备工作: 1.使用apktool工具进行反编译,微信没有做加固防护,所以这个版本的微信包反编译是没有任何问题的. 2.借助于可视化反编译工具Jadx打开微信包,后续几乎重要分析都是借助这个工具来操作的. 二.猜想与假设 做

  • Android源码系列之深入理解ImageView的ScaleType属性

    做Android开发的童靴们肯定对系统自带的控件使用的都非常熟悉,比如Button.TextView.ImageView等.如果你问我具体使用,我会给说:拿ImageView来说吧,首先创建一个新的项目,在项目布局文件中应用ImageView控件,代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.

  • python属于哪种语言

    python是一种跨平台的计算机程序设计语言.python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,可以应用于科学计算和统计.Web开发.人工智能.桌面界面开发.网络爬虫等领域. Python是一种跨平台的计算机程序设计语言. python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的.大型项目的开发. Python是一种解释型脚本语言,可以应用于以下领域:

  • 详解盒子端CSS动画性能提升

    流畅动画的标准 理论上说,FPS 越高,动画会越流畅,目前大多数设备的屏幕刷新率为 60 次/秒,所以通常来讲 FPS 为 60frame/s 时动画效果最好,也就是每帧的消耗时间为 16.67ms. 直观感受,不同帧率的体验 帧率能够达到 50 - 60 FPS 的动画将会相当流畅,让人倍感舒适: 帧率在 30 - 50 FPS 之间的动画,因各人敏感程度不同,舒适度因人而异: 帧率在 30 FPS 以下的动画,让人感觉到明显的卡顿和不适感: 帧率波动很大的动画,亦会使人感觉到卡顿. 盒子端动

  • vscode工具函数once使用示例深入剖析

    目录 背景 VSCode中的实现 lodash的实现 once的应用 once的注意事项 this指针问题 小结 背景 once 函数的起源可以追溯到函数式编程.在函数式编程中,函数被视为不可变的,这意味着它们不应修改任何状态或引用任何状态.因此,在函数式编程中,通常需要一些技巧来处理一些常见问题,例如避免在多次调用相同函数时进行冗余计算. once 函数是解决此问题的一种方法.它可以将函数转换为只能调用一次的函数,并使用一些技巧来避免冗余计算.使用 once 函数可以减少计算时间和资源的消耗,

  • Javascript中call和apply函数的比较和使用实例

    一些简单的Javascript操作中较少会用到call和apply函数,在另外一些较大型的操作中,如web应用开发,js框架开发中可能会经常遇到这两个函数.关于这两个函数的解释,网上的资料也很多,但是本人认为很多资料要么照本宣科,要么高度雷同,缺少接地气的解释.接下来我试图用更加清晰简单的思路来分析解释这两个函数. 复制代码 代码如下: 我们可以将call()和apply()看做是某个对象的方法,通过调用方法的实行来间接调用函数.call()和apply()的第一个实参是要调用函数的母对象,它是

随机推荐