You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raspberry Pi lighttpd环境下网页按钮无法执行关机脚本问题求助

问题根因

lighttpd默认将.sh后缀文件作为静态文本资源返回,没有配置对应规则将其识别为可执行CGI脚本,因此点击按钮后不会执行脚本只会返回源码内容。推荐用更简单的PHP调用逻辑实现需求,无需额外配置CGI规则:

具体操作步骤

  1. 修改index.php代码,将表单提交逻辑放到当前PHP文件中处理,不需要单独跳转执行shell脚本:
<?php
// 处理POST提交请求
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['Submit'])) {
    // 调用关机命令,注意要加sudo且www-data有权限执行
    exec('sudo /sbin/shutdown now');
    echo "正在执行关机操作,请稍候断电";
    exit;
}
?>
<!DOCTYPE html>
<html lang="en">
  <body>
    <form method="post" action="">
        <input type="submit" value="点击关机" name="Submit">
    </form>
  </body>
</html>
  1. 修正sudo权限配置,避免给www-data全root权限带来安全风险,执行visudo命令,删除之前加的全权限配置,替换为以下规则:
www-data ALL=NOPASSWD: /sbin/shutdown
  1. 确认shutdown命令的实际路径是否为/sbin/shutdown,可以在树莓派终端执行which shutdown查看,如果路径不同就把上面代码和sudo规则里的路径替换成实际查询到的路径。
  2. 重启lighttpd服务生效:sudo systemctl restart lighttpd

额外验证项

  • 确认lighttpd的PHP解析功能正常,随便写一个包含<?php phpinfo();?>的PHP文件放到站点目录访问,能正常输出PHP信息就说明解析正常。
  • 可以先把exec里的命令换成echo 'test' > /tmp/test.txt,测试点击按钮后是否生成了对应的文件,确认PHP执行外部命令的功能正常,再换成关机命令。

内容的提问来源于stack exchange,提问作者Pseudomax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:15:06