在windows2003上部署apache+PHP遇到的部分问题(附IIS配置FastCGI驱动PHP方法)

时间:2022-10-28 09:32:41

由于服务器的限制,只能在win03环境下部署PHP站点。一开始选择在IIS上扩展,旧的ISAPI方法从PHP5.2以后就没有了支持(没有了php_isapi.dll),后续都是用FastCGI方式(后附配置方法)。配上之后性能各方面也不太满意(心理偏差?..)。于是打算配上apache。

配置过程中发现了一些易忽略的问题,也有了经验,下面就列举出来。

首先选择了apache 2.2.25 的版本。安装后进行PHP扩展配置(msi包安装很方便,方法见Google)。

配置PHP扩展的方法为:

修改apache路径下-conf目录下-httpd.conf文件:

1、找到DSO部分的LoadModule列中,增加

LoadModule php5_module "D:/php/php5apache2_2.dll"

引号中路径为PHP目录的绝对路径,即引用PHP根目录下的php5apache2_2.dll文件

关于此处,apache 2.2版本需要使用PHP的php5apache2_2.dll库。旧版本有php5apache2.dll,新的php5.4以上有php5apache2_3.dll,必须取决于apache的版本选择相应的库。注意开头不要被#号注释掉。

2、加入下面这行指向PHP.ini目录的语句(有建议说位置放在LoadModule之前)

PHPIniDir "D:/php"

目录为PHP安装的位置。

3、最后在TypesConfig部分加入解析类型

AddType application/x-httpd-php .php

配置之后重启apache,却发现无法开启,apache卡住并报错(貌似标准报错都是一个error框,只能到日志中查看具体信息).

在windows2003上部署apache+PHP遇到的部分问题(附IIS配置FastCGI驱动PHP方法)

到apache目录下- logs文件夹- error.log 中查看,发现如下报错:

[crit] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.

Pre-configuration failed

原来问题在于我使用了Non Thread Safe 非线程安全的PHP版本,而apache是MPM(Multi-Processing Module 多进程模式)运行的,因此要求线程安全的PHP模块。

至于为何是NTS的版本,缘于之前使用IIS FastCGI方式驱动PHP,一直在使用非线程安全的PHP版本(FastCGI是单线程方式)。这次直接调过来使用出了问题。

看来还是不够了解apache的工作细节才出了错。于是重新下载了线程安全的php5.4-VC9-x86-Thread-Safe 版本。重新配置之后,重启apache成功,一切正常。在windows2003上部署apache+PHP遇到的部分问题(附IIS配置FastCGI驱动PHP方法)

在选择版本过程中,再对PHP各版本特点做了查看,例如VC6代表用Visual Studio 6编译,VC9代表Visual Studio 2008编译,现在最新的5.5版本已经是VC11,即MS visual stadio 2010编译的。具体应该根据自己的环境选择。

======================

附IIS FastCGI配置PHP简介


首先,FastCGI以单一线程执行,使用非线程安全(NTS)版本可以提高执行效率,而原来的ISAPI是以DLL动态库的形式使用,在处理完一个用户请求后不会马上消失,需要线程安全版本。所以FastCGI可以选择NTS版本。

(PHP配置从略,如果PHP没有配置请Google一下各版本的配置细节)

首先下载“web平台安装程序”:http://www.microsoft.com/web/gallery/install.aspx?appid=fastcgiiis6

按照提示下载后安装。


在windows2003上部署apache+PHP遇到的部分问题(附IIS配置FastCGI驱动PHP方法)


然后进入IIS管理器,Internet信息服务-》网站-》右键属性-》主目录-》配置点击‘添加’,添加一个isapi项,具体如图所示。


在windows2003上部署apache+PHP遇到的部分问题(附IIS配置FastCGI驱动PHP方法)


文件位置在C:/WINDOWS/system32/inetsrv/fcgiext.dll ,上一步安装后就有此文件。扩展名填.php


然后再C:/WINDOWS/system32/inetsrv/ 找到fcgiext.ini文件,打开编辑,添加如下内容

[Types]php = PHP[PHP]ExePath=C:\php-5.3.2-nts-Win32-VC9-x86\php-cgi.exe

上面的路径为PHP文件的实际路径。

到此配置成功,Web服务扩展中将出现如下项:


在windows2003上部署apache+PHP遇到的部分问题(附IIS配置FastCGI驱动PHP方法)


具体问题可以Google到更多的相关内容。


本文也发表在我的独立博客blog.mc-zone.me上,点击 访问此文