[php] WOLプログラムを構築

2016年1月1日

PHP テクノロジー プログラミング

前回サーバー側での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&lt;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の場合は、ググッて調べてみてください。 いくつかあるようです。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ