Я использую php 5 apache на сервере Windows 2008, я отключил IIS.
Я использую команду exec в моем PHP-скрипте, и он работает нормально, но сегодня я получил сообщение об ошибке:
Warning: exec(): Unable to fork
Я дал разрешения на cmd.exe
в папке C:\Windows\System32
но это не устранило проблему.
В 64-битных окнах (например, сервер 2008) существует папка c: \ windows \ syswow64, которая содержит все исполняемые файлы / dll, которые требуются 32-разрядным приложением. установленный на вашей 64-битной машине. Убедитесь, что ваш необходимый 32-разрядный файл .exe / dll и т. Д. Помещается в эту папку. если вы не можете найти его там, вам придется разместить 32-битную версию требуемого .exe / dll. Таким образом, это может быть использовано приложением / процессом yopur.
Теперь, когда ваше 32-битное приложение / процесс выполняется, окна автоматически перенаправляют ваш процесс для выполнения требуемого приложения в папке syswow64.
Надеюсь, это должно решить проблему совместимости.
В частности, какие разрешения вы дали кому? Вероятно, не нужным пользователю.
Запустите этот скрипт 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
После этого все снова начало работать.