警告:exec():无法fork

时间:2014-07-23 22:10:13

标签: php security windows-server-2012 windows64

好的,有问题。我的PHP脚本除1行外都有效 该行尝试使用exec()执行外部命令。

我明白了:

  

警告:exec():无法分叉

我试着寻找答案。有几个网站说我必须在cmd.exe上设置权限。无论我是在system32还是syswow64,我都不确定。

还不确定要添加的用户。 ISUR或我从lime获得的用户(get_current_user()

Windows不允许我将任何用户添加到安全列表中(右键单击文件,属性,安全性,编辑)。

它也不允许我使用icacls cmd.exe /grant IUSR:F在system32中拒绝访问)(句柄在syswow64中无效

我已添加完全访问权限(ISURSYSTEMSERVICENETWORK SERVICElime,{{1 }}和Everyone)到将创建文件的文件夹。我意识到这太过分了,不得不削减它。

我将不得不在 Windows 7x64 (开发机器)&amp ;; Windows Server 2012 (生产)。

我找到的很多例子都是针对以前的系统,或者没有详细说明。

有人可以帮帮我吗?我需要让脚本正常工作。感谢

1 个答案:

答案 0 :(得分:2)

您没有提供足够的信息来回答您的问题......

如果您的PHP脚本将在Windows操作系统中执行,也许您可​​以查看COM functions,而不是exec()。 COM功能可以让您更好地控制您要执行的操作(可能是Office自动化?)

COM比exec()更强大,因为它允许您控制生成的应用程序窗口本身(如果有的话)。例如,您可以使用不可见窗口或最小化窗口启动新进程。

可以在PHP exec() page itself中找到一些示例。

基本上,您可以执行以下操作来运行应用程序:

$shell = new COM("WScript.Shell");
$shell->Run("notepad.exe");
$shell = null;

谷歌搜索“PHP WScript.Shell”将产生很多关于这个主题的结果。

编辑:此外,您还需要将其添加到IIS web.config中:

<identity impersonate="true" userName="youruser" password="yourpass"/>`

这将设置IIS在启动进程时将模拟的用户。