我在 Windows Server 2k3 上运行 IIS6,目前已将 PHP 安装为 ISAPI 模块。我们即将把环境升级到 PHP 5.3.0,这让我怀疑我是否应该继续使用 ISAPI 模块,或者 CGI 是否更适合。
我们的组织拥有一台网络服务器,不必担心与共享主机相关的安全性;我们有几个网站,但它们都属于我们。
使用其中一种方法比使用另一种方法有什么优势吗?其中一种方法是否更安全?这只是个人喜好问题吗?
编辑:PHP 5.3.0 不再支持 ISAPI,因此您需要通过 FastCGI 安装它。从PHP 迁移指南:
已放弃对 ISAPI 模块的支持。请使用改进的 FastCGI SAPI 模块。
答案1
这非线程安全Windows 版 PHP CGI 二进制文件应该为您提供最大的稳定性、兼容性和性能:
- PHP 最初是针对多进程环境进行设计和优化的
- 大多数扩展都是考虑到这一点而创建的
- 不存在多线程环境中的“等待”现象
然而,当 CGI 二进制文件在 IIS 等多线程环境中使用时,性能和稳定性容易受到影响。因此,大多数人已经开始使用相对较新的快速CGI可供 IIS 5.1/IIS 6.0 下载并与 IIS7 捆绑在一起的扩展。
本指南解释如何使用 Microsoft 的 FastCGI 扩展安装和配置 PHP CGI。
第二种选择是使用 PHP ISAPI,但一定要 (i) 使用线程安全版本 (ii) 使用稳定且经过测试的扩展 - 否则 PHP ISAPI 可能会崩溃并拖垮 IIS。附带说明的是,PHP 中的线程安全就像一个始终处于接合状态的手刹;有些人甚至说这只是一个神话。
更新:PHP ISAPI 不再提供,因此关于 ISAPI 与 CGI 的问题不再是问题。建议使用 FastCGI。
- FastCGI 支持已内置于 IIS 的现代版本中,您只需启用它即可。
- PHP 安装程序提供了使用 FastCGI 安装 PHP 的选项。
- 对于想要执行 ZIP 安装的人可以使用“IIS 的 PHP 管理器”来配置 IIS 的 PHP 安装。
答案2
我个人发现对于不太繁忙的网站(例如平均有 0-25 个用户)ISAPI 工作得很好,我发现使用 CGI 而不是 ISAPI 的好处不大。
但是,如果您的网站很繁忙或者不介意在上面花点功夫,我建议您看看 FastCGI,因为您现在可以在 Win2003 IIS6 上获得它,它在高负载下运行速度要快得多。
答案3
与 ISAPI 模型相比,CGI 在 IIS 上的性能非常差(因为在 Windows NT 衍生的操作系统中,创建新进程(CGI 的工作方式)非常“昂贵”)。在现代版本的 IIS 中,ISAPI 的许多“问题”(内存泄漏、需要“回收”应用程序等)都已“修复”,基于 ISAPI 的应用程序通常运行良好且易于管理。您发现的任何关于基于 CGI 的应用程序“优于”基于 ISAPI 的应用程序的理由可能都是以 IIS 4.0 或 IIS 5.0 时代的思维方式编写的。