在 IIS 上运行 exec() 时出现 PHP 的 CGI 错误

在 IIS 上运行 exec() 时出现 PHP 的 CGI 错误

Windows Server 2003 x64

PHP 5.2

IIS 6.0

程序 Ink2Png.exe 设置了 Everyone->Read 和 Execute 权限。

其依赖项也是如此(microsoft.ink.dll)

PHP 安全模式已关闭

exec() 传递 [完整的 exe 路径]、空格、[另一个文件的完整路径]

该其他文件也具有完全读取权限。

输出目录具有完全的写入权限。

一旦执行 exec(),连接就会断开,浏览器甚至不会收到完整的 http 标头集,并且会报告 CGI 错误。检查输出,似乎程序根本没有运行。

有什么想法吗?我怎样才能弄清楚到底发生了什么,并让它再次运行?

编辑:此外,如果它有任何重要意义的话,它是一个.NET 应用程序。

答案1

@Patrick:如果您只授予用户访问权限,那么如果您仍然遇到问题,Everyone则需要为和添加读取/执行权限IUSR_<MachineName>以及IWAM_<MachineName>和也添加权限。请记住也为所有这些用户授予输出目录的访问权限。IIS_WPGWrite

答案2

对于此类尝试,IIS 日志中存储了什么状态代码?

可能是 Web 服务扩展列表阻止了执行?(本来以为不太可能,只期望单级可执行阻止,但事实确实如此)

答案3

要使用 PHP 执行.exe文件,您需要cmd.exeIUSR_account 的执行权限。显然,这是一个很坏主意。

答案4

为了不必授予 cmd.exe 权限,最好将 .exe 复制到 cgi-bin 目录(例如,将其重命名为 .cgi)并从那里将其作为 cgi 调用?(一个小例子;http://www.brinkster.com/KB/Article~KBA-01127-J2K8K3~PHP-call-out-to-cgi-script-example

相关内容