为安装创建 php 脚本

Create a php script for installation

如何创建 PHP 脚本来安装 apache2
我也想看看安装完成后的版本。

这是我尝试过的:

<?php  
if (!empty($_GET['act'])) {  
    $output = shell_exec ('apt install nodejs');  
    echo "<pre>$output</pre>";
} else {  
    //$output = shell_exec('nodejs -v');  
    //echo "<pre>$output</pre>"; 
    ?> 
    <form action="script.php" method="get">  
        <input type="hidden" name="act" value="run">  
        <input type="submit" value="check version">  
    </form>  
    ?php
}  
?>   

我想阐明您的脚本存在的多个问题。首先,你的脚本中有很多语法错误。

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 命令,您可以 运行 这个脚本完美。这是首先解决权限问题后最终脚本的样子。

<?php

if (!empty($_GET['act'])) {  
$output = shell_exec('sudo apt install nodejs 2>&1');  
echo "<pre>$output</pre>";
} else {  
$output = shell_exec('nodejs -v');  
echo "<pre>$output</pre>"; 
}

?> 
<form action="so1.php" method="get">  
<input type="hidden" name="act" value="run">  
<input type="submit" value="check version">  
</form>

所以,这就是让脚本执行命令来安装包的方法。如果您对此有更多疑问,请告诉我。

更新: 我知道用 sudo 执行脚本是 "Harmful" 和 "Not recommended"。但这是使该脚本起作用的一种方法。 而且,如果你想安装一个更大的包,在命令的末尾添加 -y 标志,紧跟在 nodejs 之后,以便预先 select安装或不安装软件包的选择。