Ошибка CGI из PHP при запуске exec() на IIS
Windows Server 2003 x64
PHP 5.2
IIS 6.0
Программа Ink2Png.exe установлена с правами Every->Read и Execute.
Как и его зависимость (microsoft.ink.dll)
Безопасный режим PHP отключен
exec() передается [полный путь exe], пробел, [полный путь к другому файлу]
Этот другой файл также имеет полные разрешения на чтение.
Выходной каталог имеет полные права на запись.
Как только исполняется exec(), соединение прерывается, браузер даже не получает полный набор заголовков http и сообщает об ошибке CGI. Изучив вывод, кажется, что программа даже не была запущена.
Есть идеи? Как я могу выяснить, что именно происходит, и снова запустить его?
РЕДАКТИРОВАТЬ: Кроме того, это приложение.NET, если это имеет какое-либо значение.
4 ответа
Чтобы не выдавать разрешение на cmd.exe, было бы лучше просто скопировать ваш.exe в каталог cgi-bin (переименовать его в.cgi в примере) и оттуда вызвать его как cgi? (небольшой пример; http://www.brinkster.com/KB/Article~KBA-01127-J2K8K3~PHP-call-out-to-cgi-script-example)
Какой код состояния хранится в журналах IIS для такой попытки?
Может ли это быть список расширений веб-служб, предотвращающий выполнение? (подумал бы, что это маловероятно, ожидал бы только одного уровня блокировки исполняемого файла, но все)
@ Патрик: Если вы только дали пользователю Everyone
доступ, тогда вам нужно будет добавить разрешения на чтение / выполнение для IUSR_<MachineName>
а также IWAM_<MachineName>
а также и IIS_WPG
тоже, если у вас все еще есть проблемы. Не забудьте дать Write
доступ для всех этих пользователей для вашего выходного каталога, а также.
Выполнить .exe
файл с PHP, вам понадобится разрешение на выполнение cmd.exe
для IUSR_account. Очевидно, это очень плохая идея.