2020-12-02 12:04:40 1686次浏览 1条回答 1 悬赏 10 金钱

PHP 如何获取当前电脑的 mac 地址?

  • 回答于 2020-12-02 15:07 举报
    class MacUtil
    {
        var $result = array();
        var $macAddrs = array(); //所有mac地址
        var $macAddr;            //第一个mac地址
    
        public function __construct($OS = PHP_OS)
        {
            $this->GetMac($OS);
        }
    
        public 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系统
        public function getLinux()
        {
            @exec("ifconfig -a", $this->result);
            return $this->result;
        }
    
        //Windows系统
        public 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;
                }
            }
        }
    
        /**
         * mac合法性校验 兼容大小写和(:-)
         * @param $mac
         * @return bool
         */
        public function mac_check($mac)
        {
            if (empty($mac)) {
                return FALSE;
            }
    
            $mac_reg = '/^([0-9a-fA-F]{2})((([:][0-9a-fA-F]{2}){5})|(([-][0-9a-fA-F]{2}){5}))$/i';
            return preg_match($mac_reg, $mac) == 1 ? TRUE : FALSE;
        }
    
        /**
         * mac 转化为数字表示
         * @param $mac_str
         * @return bool|number
         */
        public function macToInt($mac_str)
        {
            if (!$this->mac_check($mac_str)) return FALSE;
    
            $filter_mac = strtolower(preg_replace('/[:-]/', '', $mac_str));
            $mac_int = hexdec($filter_mac);
            if (is_numeric($mac_int))
                return $mac_int;
            else
                return FALSE;
        }
    
        /**
         * 数字转换为标准mac
         * @param $mac_int
         * @param string $chain ('-', ':')
         * @return bool|string
         */
        public function intToMac($mac_int, $chain = '-')
        {
            $max_value = 281474976710655;
            $min_value = 0;
            if (!is_numeric($mac_int) || $mac_int > $max_value || $mac_int < $min_value) return FALSE;
    
            $chain_list = array('-', ':');
            if (!in_array($chain, $chain_list)) return FALSE;
    
            $mac_hex = dechex($mac_int);
            $mac_str = strval($mac_hex);
            $mac_hex_len = strlen($mac_hex);
            if ($mac_hex_len < 12) {
                $add_len = 12 - $mac_hex_len;
                $add_str = '';
                while ($add_len--) {
                    $add_str .= '0';
                }
                $mac_str = $add_str . $mac_str;
            }
            $mac_arr = str_split($mac_str, 2);
            $mac_full_str = implode($chain, $mac_arr);
    
    
            if (!$this->mac_check($mac_full_str)) {
                return FALSE;
            } else {
                $res = str_replace("-", ":", strtoupper($mac_full_str));
                return $res;
            }
        }
    }
    
    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
PHP学院的中学生
副总裁

PHP学院的中学生

注册时间:2018-10-23
最后登录:2024-09-23
在线时长:168小时13分
  • 粉丝29
  • 金钱4725
  • 威望30
  • 积分6705

热门问题