【发布时间】: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 的权限
但这并没有解决问题。
【问题讨论】:
我在 windows server 2008 上使用 php 5 apache,我禁用了 IIS。
我在我的 PHP 脚本中使用 exec 命令,它运行良好 但是今天我遇到了一个错误:
Warning: exec(): Unable to fork
我在C:\Windows\System32 文件夹中授予了cmd.exe 的权限
但这并没有解决问题。
【问题讨论】:
您具体授予了谁哪些权限? 可能不适合正确的用户..
运行这个 php 脚本:
echo 'Script is executed by: ' . get_current_user() . getmygid();
它会告诉您哪个用户正在运行 PHP 脚本,从而告诉您哪个用户授予cmd.exe 的权限。
【讨论】:
我自己也遇到过这个问题,但最终能够解决它。问题是由于我不小心将 cmd.exe 默认设置为“以管理员身份运行”。我说“不小心”,因为我以为我只是在我的任务栏上设置快捷方式的兼容性设置,但结果证明它是在设置 .exe 本身的兼容性。无论如何,我通过在此处删除注册表项来禁用此功能:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
这样做之后,一切又开始工作了。
【讨论】:
在 64 位 Windows(例如 server 2008)中,有一个名为 c:\windows\syswow64 的文件夹,其中包含 32 位应用程序所需的所有可执行文件/dll。安装在您的 64 位机器上。 确保将所需的 32 位 .exe/dll 等放在该文件夹中。 如果在那里找不到它,则必须放置所需 .exe/dll 的 32 位版本 那里。所以这可以由yopur应用程序/进程使用。
现在,当您的 32 位应用程序/进程执行时,Windows 将自动重定向您的进程以执行 syswow64 文件夹中所需的应用程序。
希望这能解决您的兼容性问题。
【讨论】: