前回サーバー側でのWOL設定を行い、クライアント・アプリケーションで実行に成功できたが、出先のスマホからWEBブラウザでWOL起動させたいと考えたので、PHPスクリプトで実装したいと思います。
概要
ストレージサーバー(HDDのを沢山積んでいるため、必要な時だけの立ち上げにしたく、WOLセット)
WEBサーバー(PHPプログラムをセット)
とりあえず、上記サーバー2台構成でWEBプログラムを構築して、ストレージサーバーを起動させたいと思います。
PHPでガッツリプログラミング
wol.php
<?php
/**
* WOL
*/
class WOL{
const PACKET = "FF-FF-FF-FF-FF-FF";
const MAC = "AA-BB-CC-DD-EE-FF";//対象サーバー(ストレージ)のMac-Addressを登録
const PORT = 9;
const ADDR = "192.168.1.100";//対象サーバー(ストレージ)のIPアドレスを登録
public function __construct(){
$packet = self::getMacAddress(self::PACKET);
$mac = self::getMacAddress(self::MAC);
$data = self::getPacket($packet, $mac);
$fp = fsockopen(self::getBloadcast() , self::PORT , $errno , $errstr);
if(!$fp){throw new Exception($errstr."(".$errno.")");}
fwrite($fp, $data);
fclose($fp);
}
public function getMacAddress($mac){
$data = array();
foreach(preg_split('/[:\-]/', $mac) as $key => $val){
$data[] = chr(intval($val, 16));
}
return join("",$data);
}
public function getPacket($packet, $mac){
$data = array();
for($i=0;$i<16;$i++){
$data[] = $mac;
}
return $packet.join("",$data);
}
public function getBloadcast($ip=null){
if($ip===null){
$ip = self::ADDR;
}
return "udp://$ip";
}
}
「fsockopen」を使って、「fwrite」でmagic-packetを送信してますが、実は最近のLinuxOSでは、UDP制限がかかっていて、送信できない場合があるそうです。
実行するには、下記コマンドを叩くか、ブラウザでPHPにアクセスすると、ストレージサーバーが起動します。
$ php wol.php
Linuxサーバーコマンドを利用
wol.php
<?php
$mac = "AA:BB:CC:DD:EE:FF";
exec("wakeonlan $mac");
次のバージョンはLinuxに「wakeonlan」というモジュールがインストールされていれば、このまま立ち上がることができます。
もちろん、コマンドで叩いても実行できますが、ブラウザアクセスでできるという事が重要なので、こういった手段でも可能なのですね。
ちなみに「wakeonlan」がインストールされていない場合は以下のコマンドでどうぞ
$ sudo apt-get install wakeonlan
OSはDebian8で試しました。
CentOSの場合は、ググッて調べてみてください。
いくつかあるようです。
0 件のコメント:
コメントを投稿