Текстовое поле будет использоваться для захвата команды. Мне сказали, что я должен использовать функцию 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
в командную строку.