当前位置:首页 > PHP

php实现linux关机重启功能

2026-02-27 10:56:20PHP

使用PHP执行Linux关机或重启命令

PHP可以通过exec()shell_exec()system()等函数调用系统命令实现关机或重启功能。但需注意权限问题,通常需要root权限或配置sudo免密。

方法1:直接调用系统命令(需root权限)

确保PHP运行用户(如www-data)有执行权限:

php实现linux关机重启功能

<?php
// 关机命令
exec('shutdown -h now');

// 重启命令
exec('shutdown -r now');
?>

方法2:通过sudo免密配置

编辑sudoers文件(visudo)添加规则:

php实现linux关机重启功能

www-data ALL=(ALL) NOPASSWD: /sbin/shutdown

PHP代码:

<?php
exec('sudo /sbin/shutdown -r now');
?>

方法3:使用Web API间接控制

更安全的做法是创建中间脚本:

  1. 创建可执行脚本/usr/local/bin/reboot_server.sh
    #!/bin/bash
    /sbin/shutdown -r now
  2. 设置权限:
    chmod +x /usr/local/bin/reboot_server.sh
    sudo chown root:root /usr/local/bin/reboot_server.sh
  3. PHP调用:
    <?php
    exec('/usr/local/bin/reboot_server.sh');
    ?>

安全注意事项

  • 避免直接将关机/重启功能暴露给公共网络
  • 建议增加IP白名单或身份验证
  • 记录操作日志以便审计
  • 考虑使用更安全的RPC机制替代直接命令调用

完整示例代码(带基础验证)

<?php
$allowed_ips = ['192.168.1.100'];
$current_ip = $_SERVER['REMOTE_ADDR'];

if(in_array($current_ip, $allowed_ips)) {
    // 记录日志
    file_put_contents('/var/log/shutdown.log', date('Y-m-d H:i:s')." - Shutdown by $current_ip\n", FILE_APPEND);

    // 执行重启
    exec('sudo /sbin/shutdown -r +1 "System will reboot in 1 minute"');
    echo "System will reboot shortly";
} else {
    header('HTTP/1.0 403 Forbidden');
    echo "Access denied";
}
?>

标签: 重启功能
分享给朋友:

相关文章

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备 准备需要筛选的数据源,通常是一个数组,可以存储在Vue组件的…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

vue 实现拖拽功能

vue 实现拖拽功能

Vue 实现拖拽功能的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

vue分类功能实现

vue分类功能实现

Vue分类功能实现方法 使用v-for指令渲染分类列表 在Vue模板中使用v-for循环渲染分类数据,结合v-bind动态绑定分类ID或其他属性 <div v-for="category in…

vue实现备注功能

vue实现备注功能

实现备注功能的基本思路 在Vue中实现备注功能通常涉及表单输入、数据绑定和状态管理。可以通过以下方法实现: 使用v-model进行双向数据绑定 创建一个textarea或input元素,使用v-mo…

vue实现计时功能

vue实现计时功能

使用 Vue 实现计时功能 在 Vue 中实现计时功能可以通过多种方式完成,以下是几种常见的实现方法。 使用 setInterval 实现基础计时器 通过 setInterval 创建一个计时器,并…