PHP5.2 系列版本与 IIS 的集成,有两种方式:ISAPI 和 CGI。但是 PHP5.3.8 已经摒弃了 ISAPI 方式,PHP5.3.8 与 IIS 的集成提供 FASTCGI 和 CGI 方式。
Windows 系统是采用多线程的工作方式,由于CGI模式是建立在多进程的基础之上的(例如Unix/Linux),而非多线程,所以在IIS下以CGI方式运行 PHP会非常慢。在IIS下CGI模式是PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。
为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。
Windows Server 2008 的 IIS7.0/7.5 里就提供 FastCGI 方式,可以与 PHP 进行集成。而 Windows Server 2003 不提供 FastCGI 方式,所以 PHP5.3.8 要与 Windows Server 2003集成,可以采用 CGI 方式。
PHP 5.3.8 在 Windows 下的 msi (可直接运行的可执行文件)类型的安装文件,提供与 Apache 或 IIS 集成,还可以选择是 FastCGI 或者 CGI 方式。
注意:
IIS 以 CGI 方式与 PHP5.3.8 进行集成,需要打开“Web 服务扩展”里的“所有未知 CGI 扩展”允许开关。为了安全起见,可以添加一个新的Web服务扩展,要求的 exe 文件选 php-cgi.exe,并打开允许开关。
(而以 ISAPI 方式与 PHP 5.2 进行集成时,需要打开“Web 服务扩展”里的“所有未知 ISAPI 扩展”允许开关。)