Top / Prog / PHP / WakeOnLANを行うクラス

はじめに

perlやruby、ASP等では、結構サンプルがあるのですが、PHPのサンプルは あまり見つからなかったので作ってしまいました。
Wake On Lanをするには、対象のコンピュータのMACアドレスを予め調べておく必要があります。
Windowsでは、「Domain View--」(WAKI Toshihito氏作)等が便利です。

サンプルコード

<?php
//---------------------------------------------------------------------------
//  Wake On Lan 用クラス
//
//  必須データ:
//      IPアドレス(IPV4)、MACアドレス(xx:xx:xx:xx:xx:xx)
//      ブロードキャストアドレス(デフォルトでは、IPアドレスから判断して自動生成)
//---------------------------------------------------------------------------

class CWakeOnLan
{
    //------------------------------------------------------
    //プロパティ
    var $p_sBroadCastAddress;                   //ブロードキャストアドレス
    
    
    //------------------------------------------------------
    //メソッド
    
    //コンストラクタ
    function CWakeOnLan($arg_sBroadCast = "")
    //                  ブロードキャストアドレス(省略可)
    {
        //エラーの表示を一切やめる
#       error_reporting(0);
        
        $this-&gtp_sBroadCastAddress = $arg_sBroadCast;
    }
    
    
    //----------------------------------
    //マジックパケットの生成
    function _MakeMagicPacket($arg_sMacAddress)
    {
        $binMagicPacket = "";
        
        //開始部分
        for ($i = 0; $i < 6; ++$i){
            $binMagicPacket.= chr(0xff);
        }
        
        //MACアドレスの変形
        $aryMacAddr = explode(":", $arg_sMacAddress, 6);
        $strBuffer = 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){
            $binMagicPacket.= $strBuffer;
        }
        
        return($binMagicPacket);
    }
    
    
    //----------------------------------
    //IPアドレスからブロードキャストアドレスを解析
    function _AnalBroadCastAddress($arg_sIpAddress)
    {
        $strBroadCastAddress = "";
        
        //IPアドレス文字列を、配列に分割
        $aryIpAddr = explode(".", $arg_sIpAddress, 4);
        
        //それぞれのクラスを判断して、アドレスを代入
        if ($aryIpAddr[0] < 127){
            //Class A
            $aryIpAddr[1] = "255";
        }
        if($aryIpAddr[0] < 191){
            //Class B
            $aryIpAddr[2] = "255";
        }
        if($aryIpAddr[0] < 223){
            //Class C
            $aryIpAddr[3] = "255";
            
            //配列を、IPアドレス文字列に戻す
            $strBroadCastAddress = join(".", $aryIpAddr);
        }else{
            
        }
        
        return($strBroadCastAddress);
    }
    
    
    //----------------------------------
    //マジックパケットの送信
    function _SendMagicPacket($arg_sMacAddress, $arg_sIpAddress = "")
    {
        //マジックパケットの生成
        $binMagicPacket = $this-&gt_MakeMagicPacket($arg_sMacAddress);
        
        if ( $this-&gtp_sBroadCastAddress == "" ){
            //ブロードキャストアドレスが指定されていないとき
                
            if ( $arg_sIpAddress != "" ){
                //かつ、引数に目的のマシンのIPアドレスが入っているとき
                $this-&gtp_sBroadCastAddress = 
                  $this-&gt_AnalBroadCastAddress($arg_sIpAddress);
            } else {
                //全く指定されていないとき
                print("Not specifed broadcast Address.");
                return;
            }
        }
        
        //送信
        $fp = fsockopen("udp://".$this-&gtp_sBroadCastAddress, 9, $errno, $errstr);
        if (!$fp) {
            print("ERROR: $errno - $errstr\n");
        } else {
            fwrite($fp, $binMagicPacket);
            fwrite($fp, $binMagicPacket);
            fclose($fp);
        }
    }

}

?>
<?php
//---------------------------------------------------------------------------
    //実際の使い方
    require_once("./wakeonlan.inc");
    $WakeOnLan = new CWakeOnLan("192.168.0.255");
    $WakeOnLan->_SendMagicPacket("00:11:22:33:44:55");
    // or $WakeOnLan->_SendMagicPacket("00:11:22:33:44:55", "192.168.0.1");
?>

プログラミング


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-12-26 (月) 00:53:22 (4172d)