saber酱的抱枕

Fly me to the moon

03/21
08:00
软件

windows 2003上PHP多版本共存操作步骤

iis6 windows server 2003上PHP多版本共存操作步骤

最近需要安装的一个crm系统,要求php最低版本为5.4(推荐是5.6以上)。由于服务器是windows server 2003,不能运行php5.6,只好选择5.4版本。

服务器上之前的php版本是5.2.8,已经有几十个网站在使用它。为了稳妥起见,我决定不对旧版进行改动,而是采用多版本php共存的策略。

我找了一些资料,php5.4的安装参考了这里,多版本php共存参考了百度经验。最后成功了,步骤记录在下面。

1.准备php 5.4.45的安装文件:

iis6 windows server 2003上PHP多版本共存操作步骤

php-5.4.45-nts版(使用FastCGI方式必须使用nts版,ISAPI则使用ts版)
vc9安装文件 (用于支持FastCGI)
FastCGI安装文件
ZendGuardLoader安装文件

以上文件我已打包,百度云下载

2.将php 5.4.45解压到一个目录里(具体位置看自己需要),并将文件夹名改短点方便使用。

iis6 windows server 2003上PHP多版本共存操作步骤

比如我完成此步骤后的路径是
E:\PHPCore\php5445\

之后给php 5.4.45的文件夹增加iis_wpg用户(IIS7和以上使用IUSR用户组)的读取权限:

iis6 windows server 2003上PHP多版本共存操作步骤

3.将php 5.4.45文件夹内的php.ini-development改名为php.ini,并打开编辑,修改以下项目:

; extension_dir = "ext"        改为   extension_dir = "E:\PHPCore\php5445\ext" (修改为自己的路径)
; fastcgi.impersonate = 1      改为    fastcgi.impersonate = 1
; fastcgi.logging = 0          改为    fastcgi.logging = 0
; cgi.fix_pathinfo=1           改为    cgi.fix_pathinfo=1
; cgi.force_redirect = 1       改为    cgi.force_redirect = 0 (注意这个修改了值)
short_open_tag = Off          改为    short_open_tag = On (注意这个修改了值)
display_errors = On           改为    display_errors = Off (注意这个修改了值)
; extension_dir = "ext"       改为    extension_dir = "ext"
; date.timezone =              改成 date.timezone = asia/Shanghai  (这个添加了值)

之后去掉这些扩展前的分号:

;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_gd2.dll
;extension=php_mbstring.dll
;extension=php_mysql.dll
;extension=php_mysqli.dll
;extension=php_openssl.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll

改完保存。

4.安装vc9,安装完成之后再安装FastCGI。

安装后会在C:\WINDOWS\system32\inetsrv\目录下多出了5个相关文件,并且IIS6的"WEB服务扩展"里也多出了一个FastCGI Handler:

iis6 windows server 2003上PHP多版本共存操作步骤

注意最底下有“扩展”和“标准”两个,在标准里才能看到。

完成FastCGI的安装后,编辑C:\WINDOWS\system32\inetsrv\fcgiext.ini,在结尾的“[Types]”后增加内容,目的是添加php的信息。

对于多版本共存,这里是个重点。

①:如果原有的php和新装的php都是用的FastCGI,那么就需要在fcgiext.ini里对两个版本的php做出区分,并指定哪个网站的使用哪个版本的php。具体就是考百度经验里的那样:

php:1036241886=PHP528
php:141006183=PHP5445
[PHP528]
ExePath=e:\PHPCore\PHP\php5isapi.dll
InstanceMaxRequests=10000
ActivityTimeout=600
RequestTimeout=600
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000,PHPRC:e:\PHPCore\PHP\
[PHP5445]
ExePath=e:\PHPCore\php5445\php-cgi.exe
InstanceMaxRequests=10000
ActivityTimeout=600
RequestTimeout=600
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000,PHPRC:e:\PHPCore\php5445\

开头的1036241886=PHP528里的数字是iis里网站的标识符。注意修改php的路径为自己的路径。

②:我的情况不同于上面,这个服务器上旧php是使用的ISAPI,新版php才使用FastCGI。在这种情况下,就需要灵活变通。由于我服务器上的FastCGI不会接管到旧版php的事务,只会处理新版php的事务,所以我在fcgiext.ini里的写法没有采用百度经验里的写法,而是用另一篇文章里的,就像服务器上只有一个版本的php那样的写法:

php=PHP
[PHP]
ExePath=e:\PHPCore\php5445\php-cgi.exe

5.在iis里,在需要使用新版php的网站的“应用程序扩展”里,为.php扩展添加可执行文件C:\WINDOWS\system32\inetsrv\fcgiext.dll,动作限制为GET,HEAD,POST。(也可以不限制)

iis6 windows server 2003上PHP多版本共存操作步骤

由于我服务器上新版本php使用FastCGI,旧版本php使用ISAPI。所以在这里使用fcgiext.dll的话就是使用新版本的php,使用php5isapi.dll则是使用旧版本的php。

6.安装Zend Guard Loader。

将Zend Guard Loader解压到某个文件夹里,并改短文件夹名字以方便使用。

Zend Guard Loader的文件夹也需要添加iis_wpg用户的读取权限。

之后修改php.ini,在最后添加Zend Guard Loader的dll的路径:

zend_extension=E:\PHPCore\ZendGuardLoader\php-5.4.x\ZendLoader.dll

7.各个组件已经安装完毕,建立个phpinfo.php文件:

<?php phpinfo(); ?>

分别放在使用旧版php的网站和使用新版php的网站里,同时打开,看看php版本和Zend Engine版本是不是不同的。如果两者不同,那就成功啦~

php版本对比:

iis6 windows server 2003上PHP多版本共存操作步骤

iis6 windows server 2003上PHP多版本共存操作步骤

Zend Engine版本对比:

iis6 windows server 2003上PHP多版本共存操作步骤

iis6 windows server 2003上PHP多版本共存操作步骤

大功告成~

windows 2003上PHP多版本共存操作步骤