Выполнение команд оболочки 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
в командную строку.