【发布时间】:2020-04-26 02:08:31
【问题描述】:
我的 RaspberryPi 4 上有一个 Apache Web 服务器,上面有一个用 Python 编写的程序,可以打开一个 8x8 矩阵的红色 LED。我在 Web 服务器上有一个 HTML 和 PHP 页面,因此我可以远程执行该脚本。 HTML 只是 2 个按钮,按一下按钮就会转到这个 PHP 程序:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if ($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['on']))
{
lightOn();
} elseif ($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['off']))
{
lightOff();
}
function lightOn()
{
$command = escapeshellcmd('sudo python3 led_display.py');
$output = shell_exec($command);
header('Location: index.html');
exit;
}
function lightOff()
{
$command = escapeshellcmd('');
$output = shell_exec($command);
header('Location: index.html');
exit;
}
?>
这个 PHP 程序只识别 2 个按钮中的哪一个被按下并在按下时执行一个函数。对于 lightOn() 函数,它很简单,因为我只执行驱动 8x8 LED 矩阵的脚本。但是我希望用户能够通过按下另一个按钮随时停止脚本。在普通的命令行界面上,我会键入“Control + c”来停止任何正在运行的脚本。我将如何通过 shell_exec 或任何其他方法在 PHP 中实现这一点?
【问题讨论】:
-
你的代码不是很漂亮,所以:你为什么有这些函数
lightOnelightOff?这些功能是否在其他地方使用?这两个函数中有不必要的重复代码 -
能够
sudo从某些网络请求触发听起来像是灾难的秘诀。 -
@OlafKock 在不使用 sudo 的情况下实现我想要做的事情的正确方法是什么?
标签: php linux apache raspberry-pi