Проблема
У меня есть PHP-скрипт, который использует shell_exec
для запуска конвертера PDF в текст. Чтобы упростить задачу, я создал короткий скрипт, который использует shell_exec
, чтобы просто повторить вывод команды dir
.
<?php
$cmd = 'C:\\WINDOWS\\system32\\cmd.exe /c ';
echo shell_exec($cmd.' dir');
?>
Когда я запускаю это на своем сервере Apache, все работает как положено. Когда я переключаюсь на IIS, строка как бы пропускается полностью: ни ошибок, ни вывода, ни журналов, ни ничего.
К сожалению, мне нужно использовать IIS, потому что я собираюсь аутентифицировать своих пользователей по активному каталогу.
Вот что я пробовал до сих пор:
- Выполните команду через
cmd.exe /c
, а не напрямую
- Предоставить
Read & Execute
разрешение для SERVICE
в "C: \ WINDOWS \ system32 \ cmd.exe"
- Предоставить
Read & Execute
разрешение NETWORK SERVICE
для "C: \ WINDOWS \ system32 \ cmd.exe"
- Предоставить
Read & Execute
разрешение IUSR_MACHINENAME
для "C: \ WINDOWS \ system32 \ cmd.exe"
- Дайте
Read & Execute
разрешение Everyone
на "C: \ WINDOWS \ system32 \ cmd.exe" (не волнуйтесь, долго это не продолжалось, ха-ха)
- Запуск PHP как модуля ASAPI
- Это моя стандартная конфигурация
- Запуск PHP как расширение CGI
- Это не работает, я получаю сообщение об ошибке:
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers.
- В IIS Manager установите
Execute Permissions
на Scripts and Executables
на своем веб-сайте
- Добавлены html-разметка и другие функции php в скрипт, чтобы увидеть, обрабатывается ли это; оно делает. Как будто бит
shell_exec
просто пропускается.
Большое спасибо за внимание к этому вопросу, теперь я выдернула волосы из-за проблемы
Ура,
Иэн
Обновление 1
Я действительно не хотел этого делать, но в качестве пробела, пока я не нашел правильное решение, я запускаю Apache на веб-сервере (который прекрасно работает с shell_exec) и вызываю свой скрипт apache через cURL. Это некрасиво, но работает :).
Обновление 2
Я начинаю думать, что это не столько проблема с IIS или разрешениями как таковая, но, возможно, результат какой-то политики, которую мы имеем в нашей сети - хотя я не могу себе представить, что. Есть идеи слева от поля?