【问题标题】:Warning: exec(): Unable to fork警告:exec():无法分叉
【发布时间】:2014-07-23 22:10:12
【问题描述】:

好的,有问题。我的 PHP 脚本工作除了 1 行。
此行尝试使用exec() 执行外部命令。

我明白了:

警告:exec():无法分叉

我尝试寻找答案。几个网站说我必须在cmd.exe 上设置权限。我是否在system32syswow64 中这样做,我不确定。

也不确定要添加什么用户。 ISUR 或用户 (lime) 我从 get_current_user() 获得。

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

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

我已经将完全访问权限(ISURSYSTEMSERVICENETWORKSERVICElimeEveryoneIIS_ISURS)添加到文件所在的文件夹将被创建。我意识到这是矫枉过正,必须削减它。

我将不得不在 Windows 7x64(开发机器)和 Windows Server 2012(生产)中执行此操作。

我发现的许多示例要么是针对以前的系统,要么是没有详细说明。

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

【问题讨论】:

    标签: php security windows-server-2012 windows64


    【解决方案1】:

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

    如果您的 PHP 脚本要在 Windows 操作系统中执行,也许您可​​以查看 COM functions,而不是 exec()。 COM 函数可以让您更好地控制您正在尝试做的事情(也许是办公自动化?)

    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 在启动进程时将模拟的用户。

    【讨论】:

    • 我正在使用 pdftk,它是一个命令行应用程序,将 PDF 和 FDF 合并到一个新的 PDF。我会谷歌 php WScript.Shell 看看这是否能满足我的需要。
    • 作为测试,我尝试打开计算器。我什么都没有。没有计算器,没有错误。
    • 你的 PHP 是否在安全模式下运行?
    • 没有。它不在安全模式下。
    • 为我的回答添加了解决方案
    猜你喜欢
    • 2014-01-06
    • 2012-01-18
    • 2015-01-27
    • 2023-04-04
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多