当前位置:首页 > PHP

PHP实现wol

2026-01-29 19:39:31PHP

PHP实现WOL(Wake-on-LAN)功能

WOL(Wake-on-LAN)是一种通过网络唤醒处于休眠或关机状态计算机的技术。以下是使用PHP实现WOL功能的详细方法:

发送魔术包的基本原理

WOL通过发送包含目标设备MAC地址的"魔术包"(Magic Packet)实现唤醒。魔术包是一个广播帧,包含6字节的FF(十六进制)前缀,后跟16次重复的目标MAC地址。

使用PHP的socket函数发送魔术包

function wakeOnLan($macAddress, $broadcastIp = '255.255.255.255', $port = 9) {
    // 清理MAC地址格式
    $macAddress = str_replace([':', '-'], '', $macAddress);

    // 验证MAC地址
    if (!ctype_xdigit($macAddress) || strlen($macAddress) != 12) {
        throw new InvalidArgumentException('无效的MAC地址格式');
    }

    // 创建魔术包
    $magicPacket = str_repeat(chr(0xFF), 6);
    for ($i = 0; $i < 16; $i++) {
        $magicPacket .= hex2bin($macAddress);
    }

    // 创建UDP socket
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    if ($socket === false) {
        throw new RuntimeException('无法创建socket: ' . socket_strerror(socket_last_error()));
    }

    // 设置广播选项
    socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);

    // 发送魔术包
    $result = socket_sendto($socket, $magicPacket, strlen($magicPacket), 0, $broadcastIp, $port);

    // 关闭socket
    socket_close($socket);

    return $result !== false;
}

使用示例

try {
    $mac = '00:11:22:33:44:55'; // 替换为目标设备的MAC地址
    $success = wakeOnLan($mac);
    echo $success ? '唤醒信号已发送' : '发送失败';
} catch (Exception $e) {
    echo '错误: ' . $e->getMessage();
}

注意事项

目标计算机必须支持WOL功能并在BIOS/UEFI中启用。网卡和操作系统也需要正确配置WOL设置。

路由器通常需要允许局域网广播。某些网络环境可能需要在同一子网中发送魔术包。

对于跨子网唤醒,需要配置路由器的端口转发或使用专用工具。PHP脚本通常需要在与目标设备相同的局域网中运行。

替代方案:使用exec调用外部工具

如果系统允许执行外部命令,可以使用如wakeonlan或etherwake等工具:

function wakeOnLanExec($macAddress) {
    $macAddress = escapeshellarg($macAddress);
    exec("wakeonlan $macAddress 2>&1", $output, $returnVar);
    return $returnVar === 0;
}

此方法需要系统已安装相关工具,且PHP有执行权限。

PHP实现wol

标签: PHPwol
分享给朋友:

相关文章

单例模式的实现PHP

单例模式的实现PHP

单例模式的基本概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。适用于需要全局唯一对象的场景,如数据库连接、日志管理等。 PHP 单例模式的实现步骤 私有化构造函数…

PHP http长连接的实现

PHP http长连接的实现

HTTP 长连接基础概念 HTTP长连接(Keep-Alive)允许在单个TCP连接上发送和接收多个HTTP请求/响应,减少重复建立和断开连接的开销。HTTP/1.1默认启用长连接,而HTTP/1.0…

PHP实现会员管理

PHP实现会员管理

PHP实现会员管理的方法 数据库设计 创建会员表(members)包含字段:id(主键)、username、password(建议加密存储)、email、register_time、last_logi…

PHP实现图文聊天

PHP实现图文聊天

PHP实现图文聊天的方法 数据库设计 创建数据库表存储聊天消息,包含字段如消息ID、发送者ID、接收者ID、消息内容、消息类型(文本/图片)、发送时间等。使用MySQL或其他数据库管理系统。 CRE…

PHP审核流程实现

PHP审核流程实现

PHP审核流程实现方法 审核流程的实现通常涉及状态管理、权限控制和操作记录。以下是几种常见的实现方式: 状态机模式 定义审核状态常量,使用状态机控制流程流转: const STATUS_PENDI…

拼团 PHP实现

拼团 PHP实现

拼团功能 PHP 实现 拼团是一种常见的电商营销模式,允许用户邀请好友一起购买商品,达到指定人数后享受优惠价格。以下是使用 PHP 实现拼团功能的关键步骤和代码示例。 数据库设计 拼团功能通常需要…