从PHP查询IIS FastCGI设置

从PHP查询IIS FastCGI设置,php,iis,Php,Iis,我试图使用WMI通过PHP的COM API以编程方式查询IIS中配置的FastCGI设置 使用WMI CIM Studio,我可以看到有一个FastCgiSection类,它有一个FastCgi成员数组,该数组正好包含我想要的设置(特别是ActivityTimeout和RequestTimeout): 然而,到目前为止,任何试图查询这一点的尝试都没有成功。查询Win32_处理器等的示例可以在线找到,但将其转换为FastCgiSection的查询是行不通的 到目前为止,我有这个,它没有输出任何东西

我试图使用WMI通过PHP的COM API以编程方式查询IIS中配置的FastCGI设置

使用WMI CIM Studio,我可以看到有一个FastCgiSection类,它有一个FastCgi成员数组,该数组正好包含我想要的设置(特别是ActivityTimeout和RequestTimeout):

然而,到目前为止,任何试图查询这一点的尝试都没有成功。查询Win32_处理器等的示例可以在线找到,但将其转换为FastCgiSection的查询是行不通的

到目前为止,我有这个,它没有输出任何东西:

$wmi = new \COM('winmgmts:{impersonationLevel=Impersonate}//./root/WebAdministration');
$arrData = $wmi->ExecQuery("SELECT * FROM FastCgiSection");
foreach ($arrData as $obj) {
   echo "has result";
}

如何在PHP中通过WMI访问此API?

以防您还没有看到它,这里有一个非常好的链接,详细介绍了如何执行与您尝试的相同操作:

我要说的一件事(如果您还没有)是检查并验证php.ini中是否启用了以下功能:
extension=php\u com\u dotnet.dll

您的查询返回对象,而FastCGI应用程序设置存储在类中

您的代码不访问
FastCgi
成员,只访问WMI查询返回的对象。您需要在
FastCgi
属性上进行另一个循环,以获得您想要的:

$wmi=new COM('winmgmts:{impersonationLevel=Impersonate}//./root/WebAdministration');
foreach($wmi->ExecQuery('SELECT * FROM FastCgiSection') as $section) {
  foreach($section->FastCgi as $application) {
    echo $application->ActivityTimeout, PHP_EOL;
    echo $application->RequestTimeout, PHP_EOL;
  }
}
请注意,为了使此代码正常工作,您需要:

  • 在“php.ini”文件中启用(如Jonathon Hibbard所述)

我已经检查了所有功能是否都已启用,但ExecQuery语句没有为我生成任何结果。它对您有用吗?是:)查询在我的机器上返回一个结果,对应于我在IIS(v7.5)中定义的PHP/FastCGI应用程序,在“FastCGI设置”部分。使用标准设置,如:我将为示例代码分配赏金,为我指明正确的方向。我会继续挖掘,找出为什么它对我不起作用。谢谢:)可能是运行WMI查询的用户。。。它使用我的管理员帐户在命令行中的我的机器上工作。在使用IIS帐户(IUSR)的网页中,查询不会返回任何内容(我怀疑IUSR帐户是否有权访问IIS元数据库)。谢谢您的建议。我以前看过这篇文章,并使用它的方法来查询其他WMI属性,但它并没有帮助我处理FastCgiSection集合的特定强制转换。