使用PHP获取服务器MAC物理网卡地址

有个小需求是需要使用PHP来获取到服务器MAC物理网卡地址,于是通过百度获取了一段网上通用的获取方法:

//获取用户电脑MAC地址并生成唯一机器识别码

class GetMacAddr

{

    var $result  = array();

    var $macAddrs = array(); //所有mac地址

    var $macAddr;            //第一个mac地址

    function __construct($OS){

        $this->GetMac($OS);

    }

    function GetMac($OS){

        switch ( strtolower($OS) ){

            case "unix": break;

            case "solaris": break;

            case "aix": break;

            case "linux":

                $this->getLinux();

break;

            default:

                $this->getWindows();

break;

        }

        $tem = array();

        foreach($this->result as $val){

            if(preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$val,$tem) ){

                $this->macAddr = $tem[0];//多个网卡时,会返回第一个网卡的mac地址,一般够用。

                break;

                //$this->macAddrs[] = $temp_array[0];//返回所有的mac地址

            }

}

        unset($temp_array);

        return $this->macAddr;

    }

    //Linux系统

    function getLinux(){

        @exec("/usr/sbin/ifconfig -a", $this->result);

        //var_dump($this->result);

        return $this->result;

    }

    //Windows系统

    function getWindows(){

        @exec("ipconfig /all", $this->result);

        if ( $this->result ) {

            return $this->result;

        } else {

            $ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";

            if(is_file($ipconfig)) {

                @exec($ipconfig." /all", $this->result);

            } else {

                @exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->result);

                return $this->result;

            }

}

}

}

这个代码在window主机下没问题,但是在linux主机上发现获取到的mac地址为空,经过一番排查发下,主要由于一下原因引起:

用which找到该Linux命令的绝对路径,使用绝对路径执行就可以了

举例:

exec("ifconfig -a",$output);
#which ifconfig  或则whereis ifconfig

exec("/sbin/ifconfig -a",$output);

所以,把上面的Linux系统获取mac的方法调整成完整的路径(需要自己去服务器上使用which查询完整路径)就好了,

//Linux系统

function getLinux(){

    @exec("/usr/sbin/ifconfig -a", $this->result);

    return $this->result;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值