由于服务器的限制,只能在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框,只能到日志中查看具体信息).
到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成功,一切正常。
在选择版本过程中,再对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
按照提示下载后安装。
然后进入IIS管理器,Internet信息服务-》网站-》右键属性-》主目录-》配置点击‘添加’,添加一个isapi项,具体如图所示。
文件位置在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服务扩展中将出现如下项:
具体问题可以Google到更多的相关内容。
本文也发表在我的独立博客blog.mc-zone.me上,点击 访问此文