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さえ出来れば後はリモートコントロールソフト等を予め入れておくことで、外出先
から自宅のパソコンを全てコントロール出来る。
便利な世の中になったものです。

関連記事

Windows10、Windows11でネットワーク共有ホルダが見えない

LinuxでNTFSファイルシステムのマウントでアクセス権限やファイルの所有者変更で悩まないために

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

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

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

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

コメント

コメントを返信する

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

CAPTCHA