如何让shell_exec在IIS 6.0上运行

Iai*_*ser 5 php windows iis shell-exec

问题

我有一个PHP脚本,用于shell_exec运行pdf到文本转换器。为了简化该问题,我创建了一个简短的脚本,该脚本shell_exec仅用于回显dir命令的输出。

<?php
$cmd = 'C:\\WINDOWS\\system32\\cmd.exe /c ';
echo shell_exec($cmd.' dir');
?>
Run Code Online (Sandbox Code Playgroud)

当我在Apache服务器上运行此程序时,一切都会按预期进行。当我切换到IIS时,好像该行被完全跳过了:没有错误,没有输出,没有日志,什么也没有。

不幸的是,我需要使用IIS,因为我将根据活动目录对用户进行身份验证。


到目前为止,这是我尝试过的方法:

  • 通过cmd.exe /c发出命令而不是直接发出命令
  • 授予对“ C:\ WINDOWS \ system32 \ cmd.exe”的Read & Execute权限SERVICE
  • 授予对“ C:\ WINDOWS \ system32 \ cmd.exe”的Read & Execute权限NETWORK SERVICE
  • 授予对“ C:\ WINDOWS \ system32 \ cmd.exe”的Read & Execute权限IUSR_MACHINENAME
  • 授予对“ C:\ WINDOWS \ system32 \ cmd.exe”的Read & Execute权限Everyone(不用担心,它不会长期保持这种状态,哈哈)
  • 将PHP作为ASAPI模块运行
    • 这是我的标准配置
  • 将PHP作为CGI扩展运行
    • 这不起作用,我得到一个错误: CGI Error The specified CGI application misbehaved by not returning a complete set of HTTP headers.
  • 在IIS管理器中,在您的网站上设置Execute Permissions为Scripts and Executables
  • 在脚本中添加了html标记和其他php函数,以查看是否得到处理;是的。好像shell_exec只是被跳过了一点。

非常感谢您查看此问题,我现在正着手解决这个问题

干杯,伊恩


更新1

我真的不想这样做,但是作为一个停顿,直到找到合适的解决方案,我在Web服务器上运行Apache(运行shell_exec很好),然后通过cURL调用了我的apache脚本。很难看,但是可以用:)。


更新2

我开始认为这并不是IIS或权限本身的问题,而可能是我们网络上某些政策的结果-尽管我无法想象。领域左边有什么想法吗?

And*_*kov 0

我想说的Read & Execute是运行 IIS 的用户的权限(如果不是 IUSR_MACHINENAME)