Wake on LANをWindowsでPHPを使ってやろうと思っていろいろ探していたら
yuecさんのページ、下記アドレスにて
http://www.yuec.net/blog/article.php?id=42
に詳しく紹介してあった。
それを元に早速やってみる。
まずは簡単な呼び出し用のHTML(index.html)を作る。


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset= EUC-JP">
<title>WOL-Switch</title></head>
<BODY BGCOLOR="#ffe0c0">
<H3 align="center">WOL-Switch-Windows版</H3>
<HR>
<p align="center">パソコンの電源をWake on LANします。</p>
<form action="./wake_on_lan.php" method="post">
<HR>
<div align="center">
<input type="radio" name="SelectName" value="compA" id="comp_a">
<label for="パソコンA">パソコンA</label>
<input type="radio" name="SelectName" value="compB" id="comp_b">
<label for="パソコンB">パソコンB</label>
<input type="submit" value="リモートON 実行">
</div>
</form>
<HR>
</body>
</html>

実際のWOL呼び出し部分を作る(wake_on_lan.php)

<?php
//起動するパソコンのMAC Addressをここに
$A_mac = '************';
$B_mac= '************';
////初期化
$mac = '';
$mac2= '';
////正しくパソコン名がpostされているなら$SelNameに代入
if (isset($_POST["SelectName"])) {
 $SelName = $_POST["SelectName"];
}
else {
 $SelName = "";
  print("コンピュータを正しく選択してません。<br>");
 print('<A HREF="./">ここをクリック</A>');
 exit;
}
if ($SelName == 'compA') { $mac = $A_mac; }
if ($SelName == 'compB') { $mac = $B_mac; }
////紹介されているものをそのまま使わせて頂いて
$mac2 = $mac;
$body = h2s('FFFFFFFFFFFF');
for($i=0;$i<16;$i++) {
 $body .= h2s($mac);
}
$soc = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($soc, '192.168.0.255', 2304);
socket_write($soc, $body, 126);
socket_close($soc);
function h2s($h) {
 $s = '';
 $p = 0;
 while($p<strlen($h)) {
 $s .= chr(intval(substr($h, $p, 2), 16));
 $p += 2;
 }
 return $s;
}
//////Wake ON LANした後の画面表示 
echo
<<<HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
 <TITLE>WOL起動</TITLE>
 <LINK rel="stylesheet" href="./css_.css" type="text/css">
<BODY>
 <H1>起動コンピュータ情報</H1>
HTML;
print( 'コンピュータ名: ' . $SelName . '<br>');
print( 'MACADRESS: ' . $mac . '<br>');
echo
<<<HTML_
 <H2>▼WOLで起動しました</H2><HR>
 <a href="../">>>【TopPageへ】</a><br>
</body>
</html>
HTML_;
?>

これでともかくWake On LAN は動作するようだ。
ただし、予めphpのほうでsocket関数が使えるように変更しておかなければならない。
実際にphpでソケット関数を使えるようにするには
Windows版のphpの場合簡単で
php.iniの以下の行を

;extension=php_sockets.dll

のコメント(;)をはずして以下のように

extension=php_sockets.dll

しておく必要がある。
Linux版のphpの場合は、コンパイルの際のconfigureオプションに
‘–enable-sockets’ を指定する必要がある。
しかし実際、Debian Linux等を使用して方はパッケージでphpを入れている方も多い。
使いたいが為とはいえ、変更にコンパイル作業は非常にかったるい。
そこで、Linuxには便利にもWOL用コマンドがあるのでそれを利用する。
実際使うコマンドもいろいろあるようだが今回はwakeonlanコマンドを使うことにした。
インストールは普通にapt-get等で普通に入れる。
入ったら使い方は簡単、wakeonlanコマンドの後にONするパソコンのマックアドレスを
入れるだけ。それではやってみることにする。
最初と同じように、簡単な呼び出し用のHTML(index.html)を作る。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC_JP">
<title>WOL-Switch</title>
</head>
<BODY BGCOLOR="#ffe0c0">
<H3 align="center">WOL-Switch-Linux版</H3>
<HR>
<p align="center">パソコンの電源をWake on LANします。</p>
<form action="./wol_linax.php" method="post">
<HR>
<div align="center">
<input type="radio" name="SelectName" value="compA" id="comp_a">
<label for="パソコンA">パソコンA</label>
<input type="radio" name="SelectName" value="compB" id="comp_b">
<label for="パソコンB">パソコンB</label>
<input type="submit" value="リモートON 実行">
</div>
</form>
<HR>
</body>
</html>

実際のWOL呼び出し部分を作る(wol_linux.php)

<?php
/////////////////////////////////////////////////////////////////////
//起動するパソコンのMAC Addressをここに
  $A_mac = '**:**:**:**:**:**';
  $B_mac = '**:**:**:**:**:**';
////初期化///////////////////////////////////////////////////////////
  $mac = "";
  $SelName = "";
/////////////////////////////////////////////////////////////////////

////正しくパソコン名がpostされているなら$SelNameに代入
  if (isset($_POST["SelectName"])) {
    $SelName = $_POST["SelectName"];
  }
  else {
    $SelName = "";
    print("コンピュータを正しく選択してません。<br>");
    print('<A HREF="./">ここをクリック</A>');
    exit;
  }
  if ($SelName == 'compA') { $mac = $A_mac; }
  if ($SelName == 'compB') { $mac = $B_mac; }
////画面表示/////////////////////////////////////////////////////////
echo
<<<HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
 <TITLE>WOL起動</TITLE>
 <LINK rel="stylesheet" href="./css_.css" type="text/css">
<BODY>
 <H1>起動コンピュータ情報</H1>
 <p>sending wol to fluorite</p>
 <p>...</p>
HTML;

//WOL起動
system("wakeonlan " . $mac);

//Wake ON LANした後の画面表示 
echo
<<<HTML_
  <p>...</p>
  <H2>▼WOL起動動作終了しました</H2><HR>
  <a href="../">>>【TopPageへ】</a><br>
  </body>
  </html>
HTML_;
?>

こんなもんで動くでしょ。
これらを自宅サーバーのパスワードでユーザー制限しておける場所にセットして
外部からいたずらされないようにしておけばインターネットからでも自宅のパソコンを
ONが出来る。
ONさえ出来れば後はリモートコントロールソフト等を予め入れておくことで、外出先
から自宅のパソコンを全てコントロール出来る。
便利な世の中になったものです。

関連記事

前回作成したUDP通信コンポーネントでチャットソフトを作ってみる

C# Windowsショートカットをキーボード入力ではなくボタンのクリックで送る方法

C# UDP通信のためのコンポーネントの作成

C# 既定のブラウザでURLを開けずエラーの対処

DSO-TC3を買ってみた!!

QRCodeMaker(QRコード作成、読取りソフト)

コメント

コメントを返信する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA