Не работает exec и shell_exec

Я в PHP новичок и у меня возникла проблема с запуском exec. Основные данные: ОС - Windows 2003 Web Server IIS -6. При тесте:

    $out = exec('whoami 1>test.txt 2>&1',$output); 
    log_error("Error=".$out);

Выдает ошибку: PHP Warning: exec(): Unable to fork [whoami 1>test.txt 2>&1] in ....

При тесте:

    $output = shell_exec("ls -lart");
    echo "<pre>$output</pre>";

Выдает ошибку: PHP Warning: shell_exec(): Unable to execute 'ls -lart' in....

Я понимаю, что причина этих ошибок (предупреждений) одна.

Проверял:

  • IUSR - анонимный доступ открыт.
  • phpinfo - в разделе disable_functions не указана ни одной функции.

Пожалуйста, помогите разобраться в чем проблема?


Ответы (2 шт):

Автор решения: newman

Утилиты ls и whoami - это утилиты командной строки в linux системах. У вас же Windows Проблема вероятней всего в том, что у вас на сервере нет этих утилит. И поэтому они и не запускаются.

Проверить можно запустив cmd и уже там попробовать использовать указанные команды.

→ Ссылка
Автор решения: Михаил Хрусталёв

Как говорится в одной пословице: "Спасение утопающих, дело самих утопающих", после 3 недель поиска я наконец разобрался в чем проблема, но я не хочу что бы моя информация исчезла и я решил с ней поделится. И так если Вас интересует это тема то на данный момент могу сказать точно причина у них одна: ПРИОРИТЕТ. Ища информацию на англоязычных сайтах выявилась 3 основные причины.

  1. Если у Вас exec() выдает ошибку в параметрах которых присутствует cmd попробуйте тесты которые я делал (см. вверху) и ошибка не возникает - дела в приоритете (в правах на доступ) в самой cmd (с:\windows\system32\cmd прав.кл.мыши свойства -> безопасность окно "разрешение для SYSTEM" для действий ЧТЕНИЕ И ВЫПОЛНЕНИЕ должно стаять РАЗРЕШЕНО)
  2. Если же ошибка осталась возможно дело в POOL. Для IIS 6 и II 7 вот инструкция: полная инструкция по созданию нового POOL (англоязычный сайт). Ищете вкладку с надписью II 6 или II 7 и открываете. Для тех кто не знает английского - googl переводчик. Инструкция позволит Вам создать новую группу и заменить струю на вашу вновь созданную - проверенно все работает.
  3. Мой случай. Все что я опишу ниже соответствует для IIS 6, но суть для всех видно одна. Диспетчер службы IIS -> раскрываем список -> Веб-узел -> прав. кл. мыши. -> свойства -> безопасность каталога -> управление доступом -> изменить -> Анонимный доступ (должна стоять птичка). Запоминаем имя пользователя.
    Управление компьютером -> локальные пользователи -> ищем имя пользователя которого запомнили -> свойства -> членство в группе. В окошке должно стоять пользователь (не обязательно админ) с правами на чтение и выполнение, у меня же стоял гость.

Надеюсь, что моя информация сможет помочь.

→ Ссылка