IIS6上的PHP5 - 指定的CGI应用程序行为不端

时间:2009-06-17 19:32:21

标签: php iis

PHP v5.2.8

Windows Server 2003 SP2(IIS 6,我相信,虽然我在IIS管理器中的任何地方都找不到版本#)

完整错误是:

"CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers."

我从bitnami.org安装了WAMP堆栈,并且在通过Apache访问时,PHP页面完全正常,我在端口8888上运行。但是,由于网络配置和防火墙的原因,我必须开始工作端口80上的IIS服务器。端口80上还运行其他网站,包括无法更改的默认网站。不幸的是,我还必须将其作为虚拟目录运行,例如www.myserver.com/phpapp,而不是像phpapp.myserver.com这样的自己的网站。原因是我无法控制的防火墙需要新的直通规则才能允许访问新的子域。

当php应用程序在IIS中运行它自己的“网站”时,来自Bitnami的同一个WAMP堆栈在另一台服务器上工作正常,因为我可以添加一个新的PHP ISAPI过滤器 - 但该选项卡/选项在虚拟目录中不可用

我在IIS管理器中安装了php“Web Service Extension”。我在web-service-extensions中尝试了php-cgi和php5isapi.dll。此外,我已尝试将这两者作为网站“配置”映射下的“应用程序扩展”。

我还尝试了php5isapi.dll和php-cgi.exe的混合/匹配组合,用于“Web服务扩展”和网站“配置”扩展名映射。

我已经尝试在php.ini中调整一些内容,(包括确保doc_root为空)。但是,正如我之前提到的,这个网站在通过Apache端口访问时工作正常。 IIS指向完全相同的目录。

究竟是什么造成了这个错误?我花了很多时间在网上搜索,似乎这个错误出现了几个不同的原因。如果有一个PHP应用程序对响应进行了原始写入而没有先写入标题会导致此错误。当出现PHP错误导致某些格式错误的重定向时,某些PHP应用程序可能会导致此错误。

我的php错误日志在操作中缺失。在我的php.ini中我有

error_reporting  =  E_ALL
display_errors = On
log_errors = On
display_startup_errors = On
error_log = "c:\temp\php.error.log"

但是c:\ temp中永远不会有日志文件。我也尝试转义斜杠,并尝试在路径中使用正斜杠,并且日志文件永远不会显示。

再一次,我觉得有必要提一下,这一切都可以通过apache工作,所以看起来好像PHP本身就是因为一些奇怪的配置而失败(即使我找不到日志文件)更不用说这个了是我在另一台计算机上使用的php.ini,它通过IIS工作正常(其中php应用程序是它自己的“网站”而不是虚拟目录)。

我不知道还有什么其他信息可以提供 - 但是我在与他人斗争了几天之后,我的斗智斗勇。如果我放入一个HTML页面,我可以通过这个虚拟目录下的IIS访问它。是什么导致这个?

我正在尝试运行的应用是vBulletin。除了在应用程序中证实PHP的正确性之外,还不确定它是否重要。

1 个答案:

答案 0 :(得分:0)