Как я могу распечатать результат командной строки на HTML-странице с помощью PHP?

#php #apache

#php #apache

Вопрос:

Используя backtics, я могу выполнить некоторую команду на запущенной машине следующим образом —

 <?php
      echo `cd ~ amp;amp; ls -al`
?>
  

Запуск этого кода в режиме CLI ( php index.php ) показывает мне вывод, как он должен отображаться, но как я могу напечатать то же самое на HTML-странице.

должен ли я что-то включать php.ini ?? или еще??

Я также пробовал это, но, похоже, не работает в браузере

 
<?php
    echo shell_exec("cd ~ amp;amp; ls -la")
?>

  

Он работает в режиме CLI, но не в браузере

Вот вывод в режиме CLI для вышеупомянутого скрипта введите описание изображения здесь

Комментарии:

1. попробуйте использовать функцию shell_exec php

2. Не работает в браузере

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

Ответ №1:

Вы можете использовать функцию для выполнения команды https://www.php.net/manual/fr/function .shell-exec.php

Он вернет вывод команды и null, если произошла ошибка или команда ничего не возвращает

Когда вы запускаете скрипт с веб-сервера, вы наследуете права пользователя, который запускает веб-сервер. Обычно www-данные для apache2. Если вы попытаетесь запустить команду без правильных разрешений, shell_exec вернет null .

Вы можете попробовать использовать exec(), если хотите увидеть ошибки https://www.php.net/manual/en/function.exec.php

 exec('ls',$output);
var_dump($output);
  

Будьте осторожны, сначала вы должны вызвать bash

  shell_exec('/bin/bash -c "cd ~ amp;amp; ls -la"')
  

Комментарии:

1. Он работает в командной строке, но не в браузере, вероятно, что-то по умолчанию отключено в файле PHP.ini

2. Есть ли у вас какие-либо ошибки при выполнении этой функции или она просто ничего не делает?

3. Возможно, вы пытаетесь запустить команду, но команда завершается ошибкой из-за вашего разрешения. При использовании shell_exec команда выполняется пользователем apache2. Какую команду вы выполняете?

4. Нет, НИКАКИХ ошибок вообще, просто пустая страница

5. Но он работает в режиме CLI.

Ответ №2:

Попробуйте так

 $output = shell_exec( 'ls -l /abc_directory' );
var_dump ( $output );
  

Это будет зависеть от разрешения.Например, если пользователь вашего веб-сервера, такой как apache, использует www-data, имеет разрешение на доступ к этому конкретному каталогу, например /abc_directory, тогда вы увидите вывод команды, иначе в выводе ничего не будет показано.

На вашем скриншоте, когда вы работаете в cli с помощью команды php, вы запускаете php как user ace (я полагаю), но в браузере он будет выполняться как пользователь веб-сервера www-data (apache).

Комментарии:

1. На экране отображается значение NULL

2. @JohnClarkson, я добавил в ответ.