Я хочу пролить свет на многочисленные проблемы, которые есть у вашего сценария.Прежде всего, в вашем скрипте много синтаксических ошибок.
1: Например, вы не закрыли else
часть вашего условия с помощью }
.Итак, ваш браузер покажет что-то вроде localhost is currently unable to handle this request.
.
2: Теперь перейдем к другому: последние 3 строки вашего скрипта совершенно не нужны, это не вызовет ошибокно он будет отображаться в выходных данных, которые могут изменить то, как вы думаете, что это за ошибка.
3: Вы не получаете вывод, потому что у вас нет 2>&1
в концетвоя команда.Как только вы добавите его в конце своей команды, вы начнете получать сообщение об ошибке разрешения, подобное этому.
ПРЕДУПРЕЖДЕНИЕ: apt не имеет стабильного интерфейса CLI.Используйте с осторожностью в сценариях.
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
Теперь эта ошибка означает, что у вас недостаточно прав для запуска команды для установки чего-либо на вашем компьютере.Существует несколько способов решения этой проблемы с разрешениями.Если вы запускаете свой скрипт как www-data
, добавьте пользователя в группу sudo
, используя следующую команду.
usermod -aG sudo www-data
После добавления пользователя в группу вы можете запускать команды с помощью sudo
и вы можете запустить этот скрипт отлично.Вот как должен выглядеть финальный скрипт после решения проблем с разрешениями.
<code><?php
if (!empty($_GET['act'])) {
$output = shell_exec('sudo apt install nodejs 2>&1');
echo "<pre>$output
";} else {$ output = shell_exec ('nodejs -v'); echo"
$output
";}?>проверить версию
Таким образом, вы можете заставить свой скрипт выполнять команды для установки пакетов.Дайте мне знать, если у вас есть дополнительные вопросы по этому поводу.
ОБНОВЛЕНИЕ: Я знаю, что выполнение сценария с sudo
- "Вредно" и "Не рекомендуется".Но это способ заставить этот скрипт работать. И, Если вы хотите установить пакет, который больше по размеру, добавьте флаг -y
в конце вашей команды сразу после nodejs
, чтобы сделать предварительный выбор, устанавливать или не устанавливатьпакет.