Выполнение команд оболочки unix с использованием PHP

Для захвата команды будет использовано текстовое поле. Мне сказали, что я должен использовать функцию exec() для выполнения команд оболочки UNIX.

Что-то вроде этого, пользовательские типы ls в текстовом поле. Функция exec() выполнит команду UNIX, и команда отобразится на веб-странице.

Что я хочу знать, как получить результат команды оболочки и отобразить ее в веб-браузере с помощью PHP.

Я не знаю, с чего начать, так как я очень новичок в PHP.

Я использую Ubuntu.

Ответ 1

Вы можете начать просмотр руководства по php:

Выполнение системных программ

Но, как упоминалось в sdleihssirhc, это очень опасно, и вы должны НЕ разрешить все, чтобы они исполнялись!
Если вы все еще хотите это сделать, чтобы получить вывод оболочки, просто используйте

exec
Выходной сигнал оболочки будет передан во втором параметре.

например:.

exec('ls -la', $outputArray);
print_r($outputArray);

Ответ 2

exec?

system?

shell_exec?

passthru?

Обратные кавычки?

Pfah!

Настоящие разработчики используют proc_open! У него есть главное и явное преимущество предоставления вам трех потоков PHP для подачи данных в процесс и чтения как stdout, так и stderr. Это то, что выполняет другое выполнение процесса просто не очень хорошо.

Он поставляется с небольшой стоимостью какого-либо шаблона кода, поэтому он немного более подробный. Я считаю, что компромисс будет превосходным.

О, и выполнение произвольных команд от ваших пользователей, возможно, является одним из самых больших угроз безопасности, которые вы когда-либо могли себе представить,, но я предполагаю, что вы уже знаете это.

Ответ 3

Используйте $output = system($command);

Смотрите http://php.net/system и не забывайте читать предупреждения о безопасности. Если вы позволяете пользователю передавать любые данные в system() (или exec() и т.д.), Это почти так, как если бы у них была оболочка на вашем сервере. То же самое происходит, если вы не дезактивируете аргументы, переданные программам, выполняемым с помощью этих функций.

Ответ 4

Попробуйте $output = shell_exec('ls -lart');

doc shell_exec

Ответ 5

Пока это одна строка, вы можете просто echo вернуть значение exec.

Так же:

echo exec('ls');

Но он отображает только первую строку.

Ответ 6

exec(escapeshellarg($userSuppliedInput), $output);

echo $output;

Ответ 7

Вы можете использовать обратные выходы для этой цели. Как:

$output = `command-executable -switches`

Кроме того, некоторые приложения отсылают свой вывод в поток STD_ERR, поэтому вы можете не видеть вывод. В linux вы можете перенаправить ввод ошибки на "обычный" вход, добавив 2>&1 в командную строку.