的背景。我有一个PHP脚本,调用 shell_exec
. 目前,我只是想测试它的工作,并通过它运行一个基本的命令。同一脚本的不同副本存在于同一服务器上的两个不同的webapps中。两个应用程序的匿名认证都设置为IUSR。
这里是示例代码。
$output = shell_exec('dir 2>&1');
print_r($output);
在IIS中的一个网站上进行尝试,得到了想要的结果。然而,在另一个网站上,它没有捕获任何输出,而是给出了以下错误。
PHP Warning: shell_exec(): Unable to execute 'dir 2>&1' in C:\inetpub\webapp\script.php on line 4
我唯一能找到的关于这个错误的信息是来自于 此处:
在Windows上使用PHP,如果你得到 "Warning: shell_exec() [function.shell-exec]. Unable execute "错误,那么你需要检查文件'C:\WINDOWS\system32/cmd.exe'的权限。Unable to execute "错误,那么你需要检查'C:\WINDOWS\system32\cmd.exe'文件的权限。你需要对这个文件进行重新执行的权限。 我建议使用sysinternals Process Monitor'procmon.exe'来确认试图运行'cmd.exe'的用户。筛选 "进程名 "是 "php-cgi.exe","路径 "以 "cmd.exe "结束。查看带有拒绝访问错误的任务的事件属性,它会显示 "冒充 "的用户名。 这通常是 "Internet Guest Account",通常是 "NT AUTHORITY/IUSR"。
然而,这似乎不像是一个权限问题。我不明白为什么它的工作通过网站而不是另一个。两个网站的匿名认证都设置为IUSR。
也。safe_mode
在php.ini中设置为 off
.
还有什么需要我检查的吗?cmd.exe 是否需要明确的 IUSR 的 readexecute 权限?
事实证明,不管是什么原因,IUSR 是问题所在。我不能确切地知道原因,但将受影响网站的匿名认证改为使用另一个用户,就成功了。所以说到底是权限问题。