当前位置:首页 > 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实现拨号功能的方法 使用HTML5的tel协议 在Vue模板中直接使用<a>标签的tel:协议实现拨号功能。这种方法适用于移动端浏览器,点击后会调起系统的拨号界面。 <te…

h5实现点击复制功能

h5实现点击复制功能

使用document.execCommand方法(兼容旧浏览器) 通过document.execCommand('copy')实现复制功能,需先选中文本内容。创建一个隐藏的textarea或input…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

vue实现答题功能

vue实现答题功能

Vue实现答题功能 数据准备 创建一个包含题目、选项和正确答案的数据结构,通常是一个数组对象。每个题目对象包含问题文本、选项数组和正确答案索引。 const questions = [ {…

vue怎么实现功能

vue怎么实现功能

Vue 是一个渐进式 JavaScript 框架,常用于构建用户界面。以下是一些常见的功能实现方法: 数据绑定 Vue 通过 v-model 实现双向数据绑定,适用于表单输入等场景: <te…

php秒杀功能的实现

php秒杀功能的实现

秒杀功能的核心设计 高并发场景下秒杀系统的核心在于解决超卖问题和性能瓶颈。需要结合缓存、队列、锁机制等技术实现。 数据库设计 商品表需包含库存字段,例如: CREATE TABLE `seckil…