Я пытаюсь заставить exec работать на сервере Windows и получать сообщение об ошибке «неспособное fork». После небольшого перебора проблемы, кажется, рекомендуется исправить это, чтобы предоставить учетную запись IUSR READ и EXECUTE для c: \ Windows \ System32 \ cmd.exe.
Но это было серьезное отверстие безопасности? Это безопасно? Есть ли другой способ выполнить [из php] exe, проживающего на сервере?
Он должен выполнить cmd.exe, потому что, когда Windows PHP видит это:
exec("foo -bar -baz");
Он называет это:
cmd /c foo -bar -baz
Это только дыра в безопасности, если вы позволяете вашему пользователю вводить параметры. IE, вы не должны этого делать:
// DO NOT DO THIS! exec("foo -bar=" . $_GET['bar']);
Вместо этого вы должны дезинфицировать свои параметры с помощью escapeshellarg .
// This is okay. (Be sure foo.exe can handle unexpected input!) exec("foo -bar=" . escapeshellarg($_GET['bar']));
Следует иметь в виду, что создание процесса под Windows требует дополнительных накладных расходов, чем в операционных системах Unix-класса. Если у вас большое количество пользователей, многократный вызов exec()
может привести к сбою в работе сервера. Если вы ожидаете большой нагрузки на свой сервер, вы можете захотеть, чтобы рабочий процесс постоянно работал как служба Windows