MacIp.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace app\common\library;
  3. class MacIp {
  4. private static $return_array = array(); //返回带有MAC地址的字串数组
  5. private static $mac_addr; //MAC 地址
  6. public function __construct() {
  7. }
  8. /**
  9. * 获取当前机器的MAC地址
  10. */
  11. public static function getMac() {
  12. $os_type = PHP_OS;
  13. switch ( strtolower($os_type) ) {
  14. case "linux":
  15. self::forLinux();
  16. break;
  17. case "solaris":
  18. case "unix":
  19. case "aix":
  20. break;
  21. default:
  22. self::forWindows();
  23. break;
  24. }
  25. $temp_array = array();
  26. foreach (self::$return_array as $row) {
  27. foreach ($row as $value) {
  28. 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", $value, $temp_array) ) {
  29. self::$mac_addr = $temp_array[0];
  30. break;
  31. }
  32. }
  33. if (!empty(self::$mac_addr)) {
  34. break;
  35. }
  36. }
  37. unset($temp_array);
  38. return self::$mac_addr;
  39. }
  40. private static function forWindows(){
  41. @exec("ipconfig /all", $macInfo);
  42. if ( $macInfo ) {
  43. self::$return_array[] = $macInfo;
  44. } else {
  45. $ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
  46. if ( is_file($ipconfig) ) {
  47. @exec($ipconfig." /all", $macInfo);
  48. }else {
  49. @exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $macInfo);
  50. }
  51. self::$return_array[] = $macInfo;
  52. }
  53. return self::$return_array;
  54. }
  55. private static function forLinux(){
  56. @exec("/sbin/ifconfig", $macInfo);
  57. if ( $macInfo ) {
  58. self::$return_array[] = $macInfo;
  59. } else {
  60. $file_arr = array('ifcfg-eth0', 'ifcfg-eth1', 'ifcfg-eth2', 'ifcfg-eth3', 'ifcfg-em1', 'ifcfg-em2', 'ifcfg-em3', 'ifcfg-em4');
  61. foreach ($file_arr as $file) {
  62. if (file_exists('/etc/sysconfig/network-scripts/'.$file)) {
  63. self::$return_array[] = file('/etc/sysconfig/network-scripts/'.$file);
  64. }
  65. }
  66. }
  67. return self::$return_array;
  68. }
  69. }