Intereting Posts
Число переменных не соответствует количеству параметров – Да, они делают передача идентификатора сеанса через URL-адрес MAMP / PHP.INI: параметр date.timezone в phpinfo () показывает «нет значения», даже если значение установлено в php.ini Какие маркеры можно параметризовать в подготовленных отчетах PDO? Как получить текущее время в ms в PHP? Symfony2 создает и загружает zip-файл CryptoJS шифрует AES с парольной фразой, но для расшифровки PHP требуется ключ Как перенаправить старые «уродливые» URL-адреса на seo-friendly? Как увеличить числовую часть строки на единицу? Будет ли Nginx в качестве обратного прокси для справки Apache только для динамического контента xdegug не может перейти к следующей строке в представлении php Как перенаправить https на http без SSL-сертификата Ошибка Angularjs inprogress PHP – Объединение двух массивов в один массив (также Remove Duplicates) Как использовать обработчик сохранения Zend 2 DbTableGateway?

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