PHPでWakeOnLan

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

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

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

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

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

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

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を指定しておいても大丈夫です。

では使用例を示します。

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>

CAPTCHA


*