PHPでWakeOnLan

現在ではほとんどのComputerがWakeOnLan(通称WOL)に対応しました。

これにより、多少時間のかかるComputerの起動を帰宅前にちょっと早く起動しておくなど、RemoteによるComputerの起動が実現でき、とても便利な機能です。

さて、これを実行するにはComputerの設定と、そのComputerに起動のためのMagicPacketを送ってやる必要があります。

今回はそのMagicPacketを送るProgramをPHPで書いてみたので紹介したいと思います。

今回はComputerの設定の仕方は省略したいと思います。

今回のProgramは関数になっていますので、以下のCodeをまずはCopy&Pasteしちゃってください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function wakeOnLan($macAddr, $ipAddr) {
    // makeMagicPacket
    $magicPacket = "";
    for ($i=0; $i<6; $i++) {
        $magicPacket.= chr(0xff);
    }
    $aryMacAddr = explode(":", $macAddr, 6);
    $buffer = pack("H*H*H*H*H*H*", $aryMacAddr[0], $aryMacAddr[1], $aryMacAddr[2],
    $aryMacAddr[3], $aryMacAddr[4], $aryMacAddr[5]);
    for ($i=0; $i<16; $i++) {
        $magicPacket.= $buffer;
    }
 
    // makeBroadCastAddr
    $aryIpAddr = explode(".", $ipAddr, 4);
    if ($aryIpAddr[0] < 127) {
        $aryIpAddr[1] = "255";
    }
    if ($aryIpAddr[0] < 191) {
        $aryIpAddr[2] = "255";
    }
    if ($aryIpAddr[0] < 223) {
        $aryIpAddr[3] = "255";
    }
    $broadCastAddr = join(".", $aryIpAddr);
    // send
    $fp = fsockopen("udp://".$broadCastAddr, 2304, $errno, $errstr);
    if (!$fp) {
        print("ERROR: $errno - $errstr\n");
    } else {
        fwrite($fp, $magicPacket);
        fwrite($fp, $magicPacket);
        fclose($fp);
    }
 }

使い方は簡単、関数wakeOnLanに起動したい対象のComputerのMAC AddressとIPAddressを指定するだけです。

ただし、おそらくRouter越えはしないと思うので、IPAddressは255.255.255.255を指定しておいても大丈夫です。

では使用例を示します。

1
wakeOnLan("FF:FF:FF:FF:FF:FF", "255.255.255.255");

この例ではMAC Addressが”FF:FF:FF:FF:FF:FF”のComputerを起動しています。

IPAddressは前述のとおり正しいIPAddrでも255.255.255.255でも通常は構いません。

とても簡単ですよね!

 

Filed under: PHP — ほくと 23:16  Comments (0) Tags :
トラックバック

このエントリーのトラックバックURL:

コメントはまだありません »

No comments yet.

Leave a comment





(一部のHTMLタグを使うことができます。)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>