What best practices should be followed when adapting a PHP script for Wake-on-LAN to work across multiple subnets?

When adapting a PHP script for Wake-on-LAN to work across multiple subnets, the best practice is to use broadcast packets to send the magic packet. This allows the packet to reach all devices on the network, regardless of the subnet they are on.

<?php
function wake_on_lan($mac_address, $broadcast_address) {
    $mac_hex = str_replace(':', '', $mac_address);
    $mac_bin = pack('H12', $mac_hex);
    
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
    socket_sendto($socket, $mac_bin, strlen($mac_bin), 0, $broadcast_address, 7);
    socket_close($socket);
}

// Usage
$mac_address = '00:11:22:33:44:55';
$broadcast_address = '255.255.255.255'; // or specific broadcast address for the subnet
wake_on_lan($mac_address, $broadcast_address);
?>