为什么我得到错误0x80070585时,试图在IIS 7上运行PHP应用程序


Why am I getting error 0x80070585 when trying to run a PHP application on IIS 7?

我在Windows 7上运行IIS 7。

我已经通过WebMatrix安装了PHP v5.3,在IIS中为我的PHP应用程序设置了一个网站,并为"Everyone"目录启用了读写权限。

当我浏览到应用程序时,得到以下错误:

HTTP Error 500.0 - Internal Server Error
<handler> scriptProcessor could not be found in <fastCGI> application configuration
Error Code  0x80070585

这是我尝试的:

  • 确保安装了CGI (Windows功能-> Internet信息服务->万维网服务->应用程序开发功能-> CGI;

  • 注释掉'php.ini'中'[ExtensionList]部分下的所有扩展

  • 注意到网上关于编辑一个名为"fcgiext.ini"的文件的讨论。我在硬盘上搜索了这个文件;0的结果。

  • 注意到这个讨论,建议在处理程序部分的scriptProcessor属性中的任何内容也应该在fastCgi部分中。但我已经有了一个名为"Web"的文件。在我的PHP应用程序路径中,已经有一个fastCgi部分:

    <fastCgi>
      <application fullPath="%RoleRoot%'approot'Php'php-cgi.exe" arguments="-c %RoleRoot%'approot'Php'php.ini" />
    </fastCgi>
    

对不起,如果这是所有的有点不连贯。我不是一个PHP专家,我不确定从哪里开始解决这个问题。

至少,任何提示是否这是一个IIS或PHP或FastCgi问题将是一个很大的帮助。

我会尝试使用PHP管理器查看PHP是否正确配置为IIS

安装PHP管理器http://phpmanager.codeplex.com/

然后在IIS中运行它(在IIS Mgr中显示为一个模块)以查看PHP是否已注册。如果不是,单击注册新版本,导航到php-cgi.exe并选择它。然后单击Check PHPInfo()以确保它正在运行。

希望有帮助。div标记

以上所有的解决方案都是基于工具的。支持FastCGI的底层IIS机制没有详细提到,但它是把事情做好的关键。

  1. Windows的PHP二进制文件必须在某个地方提取,并且你需要准备好它的PHP .ini。
  2. 在IIS管理器的Handler mapping部分(或等价于applicationHost)中添加一个模块映射。
  3. 确保在IIS管理器的服务器级别的FastCGI设置部分注册了php-cgi.exe(尽管在前一步IIS管理器应该询问您是否希望它帮助自动添加此条目)。

这篇IIS.net文章列出了更多的信息,但它没有提到最后一步,

https://www.iis.net/learn/application-frameworks/scenario-build-a-php-website-on-iis/configuring-step-1-install-iis-and-php # 13

而这个PHP页面几乎用截图显示了所有内容,

https://secure.php.net/manual/en/install.windows.iis7.php

如果您得到500.0和0x80070585,很可能最后两个步骤没有完成,您需要返回IIS配置。

您需要在处理程序定义中包含(Fast)CGI应用程序的参数。

不幸的是,这个不是add处理程序文档中描述的,而只是出现在关于使用IIS设置PHP的示例文档(1,2)中:

要创建这些映射,必须将元素的fullPath和arguments属性中的设置添加到FastCGI进程的映射中的scriptProcessor属性中,并以管道"|"字符分隔。

因此,在您的特殊情况下,处理程序定义中的scriptProcessor需要设置为:

<handlers>
  ...
  <add ... scriptProcessor="%RoleRoot%'approot'Php'php-cgi.exe|-c %RoleRoot%'approot'Php'php.ini" />
  ...

(还没有检查env变量是否会导致映射问题)