PHP的版本选择

PHP版本特别多,特别杂,想自己搭一套php的运行环境可不是一件容易的事,稍不留神就遇到一个坑,在某个问题上卡住半天。这篇文章尝试将PHP时的版本选择中可能遇到的坑逐一说明:

Windows下

首先看操作系统的版本,如果是Windows的在这里下载:http://windows.php.net/download/

再看操作系统是32位还是64位?如果是32位的,就选择带“x86”的版本,如果是64位的,就选择带“x64”的版本。

然后看WEB服务器是什么?如果是IIS系列,就选择带“Non Thread Safe”的版本,如果是Apache httpd系列,就选择带“Thread Safe”的版本。

如果是Apache httpd还要看这个二进制版本是怎么编译的,有三种编译类型,分别是:VC6、VC9、VC11(分别代表Visual C++ 6、Visual C++ 2008、Visual C++ 2012)。这里就有麻烦了:PHP官方的最新版本5.5已经用VC11编译,5.4是用VC9编译的。可是Apache httpd的最新版本呢,至今还是用VC6编译。这意味着一个惊人的事实:Apache httpd的官方版本和PHP的官方版本竟然是无法兼容的!当我费了很大功夫发现这个事实的时候,我的嘴巴子都要惊掉了。那现有的Windows下的Apache+PHP是怎么搞的呢?可以自己用VC11编译Apache httpd,但这太折腾了,PHP官方建议下载第三方打包好的Apache httpd版本,推荐了这个站点:http://www.apachelounge.com/download/,需要说明一点:这个VC11不支持XP,如果你像我一样有XP怀旧症,最高只能升级到5.4.24,5.5是用VC11编译的,而VC11不支持XP和2003。

知道了上述几个原则再看下载的文件名就很清楚了,下面做习题巩固吧,看这两个文件名代表什么版本?

1 VC11 x64 Non Thread Safe
2 VC9 x86 Thread Safe

答案:
1 使用VC11编译的用于64位Windows的,与IIS配套使用的版本
2 使用VC9编译的用于32位Windows的,与Apache httpd配套使用的版本

Linux下

如果是Linux系的在这里下载PHP的源码:http://cn2.php.net/downloads.php

与上面Windows版不同的是,这里下载到的不能直接用,只是PHP的源码,要安装需要自己编译,要编译就需要安装gcc、make等一堆编译软件。看到文档里说./configure、make、make install,针对的就是PHP的源码版本而言。

自己编译php就更麻烦了,依赖的库一大堆,等着人掉进去的坑也有一大堆,我将在另一篇文章里说。如果嫌麻烦,可以找已经编译好的版本,具体的说就是各个发行版的官方的软件库。下面以流行的ubuntu系和centos系为例分别说明;

deb包管理式(ubuntu、Debian)

用apt-cache search php命令可以搜出很多结果,我们需要是“php5”,完整的命令是:apt-get install php5

这显然不是永远适用的,因为命令中有版本号5,未来PHP6是什么情况谁也不知道。

如果想在shell中安装一个命令行的php引擎,就安装这个包

apt-get install php5-cli

RPM包管理(Fedora、RedHat、SUSE、CentOS)

yum install php

如果是php命令行,就安装yum install php-cli

吐个槽,连选择版本都要知道这么多(本文的全名应该叫《PHP的版本选择:从入门到精通》,哈哈),说了这么多,还没开始真的配置php环境呢,真的只是选择版本而已,搞技术真是太辛苦了。

 评论
  我正在遇到此问题,好麻烦

  正在纠结,看了你的文章问题迎刃而解,谢谢

  fff

  ·111111111111

  fdafdsagfsdgkjfusdghfuisydhufgysafwetgfysiudgfyaiudghsdukgfsdjgfjdsgf dgtfsdfdsgsdgfsdfdwfrdsgdfhrtuhyrfgrfewryregegftertehysertgfrrytrgrey65jihn gbfytrujty

  fdafdsagfsdgkjfusdghfuisydhufgysafwetgfysiudgfyaiudghsdukgfsdjgfjdsgf dgtfsdfdsgsdgfsdfdwfrdsgdfhrtuhyrfgrfewryregegftertehysertgfrrytrgrey65jihn gbfytrujty

  fdafdsagfsdgkjfusdghfuisydhufgysafwetgfysiudgfyaiudghsdukgfsdjgfjdsgf dgtfsdfdsgsdgfsdfdwfrdsgdfhrtuhyrfgrfewryregegftertehysertgfrrytrgrey65jihn gbfytrujty

  fdafdsagfsdgkjfusdghfuisydhufgysafwetgfysiudgfyaiudghsdukgfsdjgfjdsgf dgtfsdfdsgsdgfsdfdwfrdsgdfhrtuhyrfgrfewryregegftertehysertgfrrytrgrey65jihn gbfytrujty

  dsfgrffsergsdfgedsghrdtfhuyrtdijtikryujryjhibgtdyigfvyjdsyufgsajdgfjsagfydsgvcuyagsd7ygvft rgewufygsduyfguyetrfygsadycgfjgdbjbudgfudsytufhvgdsfuyguirkhgukdysutreuutgsehktuheruyuiesyhgudsyufgurkh vb

  dsfgrffsergsdfgedsghrdtfhuyrtdijtikryujryjhibgtdyigfvyjdsyufgsajdgfjsagfydsgvcuyagsd7ygvft rgewufygsduyfguyetrfygsadycgfjgdbjbudgfudsytufhvgdsfuyguirkhgukdysutreuutgsehktuheruyuiesyhgudsyufgurkh vb

  dsfgrffsergsdfgedsghrdtfhuyrtdijtikryujryjhibgtdyigfvyjdsyufgsajdgfjsagfydsgvcuyagsd7ygvft rgewufygsduyfguyetrfygsadycgfjgdbjbudgfudsytufhvgdsfuyguirkhgukdysutreuutgsehktuheruyuiesyhgudsyufgurkh vb

  dsfgrffsergsdfgedsghrdtfhuyrtdijtikryujryjhibgtdyigfvyjdsyufgsajdgfjsagfydsgvcuyagsd7ygvft rgewufygsduyfguyetrfygsadycgfjgdbjbudgfudsytufhvgdsfuyguirkhgukdysutreuutgsehktuheruyuiesyhgudsyufgurkh vb

  所谓 Non Thread Safe 的版本,我的理解是适合用于 fastcgi 的版本。Thread Safe 由于要处理线程之间的临界点,性能略低于 Non Thread Safe,而在 fastcgi 环境中,不同 HTTP 请求是处于不同进程中处理,相当于单独线程,因此不需要 Thread Safe。

  写的很详细,谢谢分享
 发表评论
姓   名: