#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, но не в браузере
Комментарии:
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, я добавил в ответ.