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

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

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

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

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

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

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

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

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

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

Например:

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

exec ?

system ?

shell_exec ?

passthru ?

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

Pfah!

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

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

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

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

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

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

doc shell_exec

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

Вот так:

echo exec('ls');

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

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

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

 $output = `command-executable -switches` 

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