【问题标题】:Warning: exec(): Unable to fork in PHP警告:exec():无法在 PHP 中分叉
【发布时间】:2012-01-18 11:40:52
【问题描述】:

我在 windows server 2008 上使用 php 5 apache,我禁用了 IIS。

我在我的 PHP 脚本中使用 exec 命令,它运行良好 但是今天我遇到了一个错误:

Warning: exec(): Unable to fork 

我在C:\Windows\System32 文件夹中授予了cmd.exe 的权限 但这并没有解决问题。

【问题讨论】:

    标签: php windows cmd


    【解决方案1】:

    您具体授予了谁哪些权限? 可能不适合正确的用户..

    运行这个 php 脚本:

    echo 'Script is executed by: ' . get_current_user() . getmygid();
    

    它会告诉您哪个用户正在运行 PHP 脚本,从而告诉您哪个用户授予cmd.exe 的权限。

    【讨论】:

    • 感谢您的回复。脚本由SYSTEM执行,id为0,SYSTEM拥有完全控制权限
    • 尝试授予 Internet 访客用户 (IUSR) 权限
    • 我有 IUSR、IIS_IUSRS、USERS GUESTS,并且我已授予完全控制权,但我没有 Internet 访客用户。我正在使用 win 2008
    • 我使用 apache 而不是 IIS 的另一件事。我禁用了 IIS
    • 在这方面还有什么帮助吗?
    【解决方案2】:

    我自己也遇到过这个问题,但最终能够解决它。问题是由于我不小心将 cmd.exe 默认设置为“以管理员身份运行”。我说“不小心”,因为我以为我只是在我的任务栏上设置快捷方式的兼容性设置,但结果证明它是在设置 .exe 本身的兼容性。无论如何,我通过在此处删除注册表项来禁用此功能:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
    

    这样做之后,一切又开始工作了。

    【讨论】:

      【解决方案3】:

      在 64 位 Windows(例如 server 2008)中,有一个名为 c:\windows\syswow64 的文件夹,其中包含 32 位应用程序所需的所有可执行文件/dll。安装在您的 64 位机器上。 确保将所需的 32 位 .exe/dll 等放在该文件夹中。 如果在那里找不到它,则必须放置所需 .exe/dll 的 32 位版本 那里。所以这可以由yopur应用程序/进程使用。

      现在,当您的 32 位应用程序/进程执行时,Windows 将自动重定向您的进程以执行 syswow64 文件夹中所需的应用程序。

      希望这能解决您的兼容性问题。

      【讨论】:

        猜你喜欢
        • 2014-01-06
        • 1970-01-01
        • 2015-01-27
        • 2023-04-04
        • 1970-01-01
        • 2014-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多