shell_exec в PHP не работает

1

shell_exec() не работает на моем localhost. Я прочитал много веб-сайтов, чтобы решить эту проблему, но не могу найти решение. Этот код:

    $output = shell_exec("env");
    print "<pre>$output</pre>";

Не дает результата.

Я проверил в php.ini disable_functions но shell_exec не отключен. Я сделал error_reporting = E_ALL но опять нет вывода (без ошибок). Все, что я получаю, это просто пустой экран. Даже safe_mode выключен.

Если я пишу echo "BULB"; после вышеуказанного кода печатается "BULB".

В чем может быть проблема?

  • 1
    Если вы просто запустите env в своей консоли, вы получите вывод?
  • 0
    Я получаю этот вывод ReferenceError: env is not defined
Показать ещё 5 комментариев
Теги:
shell-exec

1 ответ

2
Лучший ответ

Какую информацию вы ожидаете получить от env? Из ваших комментариев мне кажется, что вы пытаетесь использовать команду Linux в системе Windows, которая никогда не сработает.

В системах Linux команда env сама по себе возвращает список переменных среды, которые были определены. Однако env не является допустимой командой в Windows.

Если вы просто ищете список переменных среды, на самом деле это можно получить на PHP без необходимости обращаться к команде оболочки. PHP имеет встроенную глобальную переменную $_ENV которая содержит копию всех переменных среды, которые были определены при заявлении программы. Просто print_r($_ENV) чтобы увидеть их.

С другой стороны, если вам действительно нужно использовать shell_exec() по какой-то причине, то вам нужно принять во внимание используемую вами операционную систему. В Linux вы должны использовать команду env. Эквивалент в Windows set без каких-либо аргументов. Таким образом, ваш код становится:

$output = shell_exec("set");

Обратите внимание: формат вывода может не совпадать с тем, что вы получили бы в Linux, поэтому, если вы его разберете, этот код тоже изменится.

Если вам нужен код для работы на нескольких платформах, вам нужно будет написать дополнительный код перед shell_exec() чтобы определить операционную систему и разработать правильную команду для использования.

  • 1
    В целом, ваша точка зрения относительно переносимости вызовов shell_exec верна, но env является допустимой командой в Windows.
  • 0
    @TomFenech - я только что открыл приглашение DOS и набрал 'env', и получил классический 'env' is not recognised as an internal or external command. , Так что, если это команда Windows, это не по пути моей системы.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню