问题
我有一个shell_exec
用于运行 pdf 到文本转换器的 PHP 脚本。为了简化问题,我创建了一个简短的脚本,用于shell_exec
回显dir
命令的输出。
<?php
$cmd = 'C:\\WINDOWS\\system32\\cmd.exe /c ';
echo shell_exec($cmd.' dir');
?>
当我在我的 Apache 服务器上运行它时,一切都按预期工作。当我切换到 IIS 时,就好像完全跳过了该行:没有错误、没有输出、没有日志、什么都没有。
不幸的是,我需要使用 IIS,因为我要针对 Active Directory 对我的用户进行身份验证。
这是我到目前为止所尝试的:
- 通过发出命令
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 或权限本身的问题,而是我们网络上的某些策略的结果 - 尽管我无法想象是什么。左派有什么想法吗?