最近需要安装的一个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的安装文件:
php-5.4.45-nts版(使用FastCGI方式必须使用nts版,ISAPI则使用ts版)
vc9安装文件 (用于支持FastCGI)
FastCGI安装文件
ZendGuardLoader安装文件
以上文件我已打包,百度云下载
2.将php 5.4.45解压到一个目录里(具体位置看自己需要),并将文件夹名改短点方便使用。
比如我完成此步骤后的路径是
E:\PHPCore\php5445\
之后给php 5.4.45的文件夹增加iis_wpg用户(IIS7和以上使用IUSR用户组)的读取权限:
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:
注意最底下有“扩展”和“标准”两个,在标准里才能看到。
完成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。(也可以不限制)
由于我服务器上新版本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版本对比:
Zend Engine版本对比:
大功告成~