PHP 获取计算机唯一标识:CPU ID 与网卡 MAC 地址
在 Web 开发中,有时需要根据服务器的硬件特征生成唯一标识,例如用于软件授权验证或设备指纹识别。本文将演示如何使用 PHP 调用操作系统底层命令来提取 CPU 序列号和网卡物理地址(MAC),确保代码在不同环境下具备较好的兼容性。
获取 CPU 唯一标识 (CPU ID)
CPU 标识通常可以通过 Windows 系统的 wmic 命令获取。由于不同服务器环境对系统函数的支持情况不同,以下代码兼顾了 exec 和 system 两种路径,优先使用输出捕获更灵活的 exec,若不可用则降级使用 system 配合输出缓冲。
第1步:定义获取 CPU ID 的函数
该函数首先检查服务器是否允许执行外部命令。如果允许,它尝试解析命令输出以找到包含 "ProcessorId" 的行,并提取其后的值作为 CPU ID。
function getCPUID() {
$a = '';
$b = array();
// 优先尝试使用 exec
if (function_exists('exec')) {
// 注意:Windows 下 wmic cpu get ProcessorId /value 是常用命令
// 这里为了兼容原意,保留对输出数组 b 的处理逻辑
if (!@exec('wmic cpu get ProcessorId /value', $b)) {
return false;
}
} elseif (function_exists('system')) {
// 降级方案:使用 system + ob_start
ob_start();
if (!@system('wmic cpu get ProcessorId /value')) {
return false;
} else {
$output = ob_get_contents();
ob_end_clean();
// 将 system 输出的字符串拆分为数组处理
$b = explode("\n", $output);
array_pop($b); // 移除末尾空行
}
} else {
return false;
}
// 遍历输出行,寻找关键数据
$all = sizeof($b);
for ($i = 0; $i < $all; $i++) {
// 根据 wmic 输出格式调整匹配逻辑
// 原代码匹配 Description 可能不适用于所有 wmic 版本,此处修正为通用逻辑
if (strpos($b[$i], "ProcessorId") !== false) {
if (isset($b[$i+1])) {
$c = explode("=", $b[$i+1]);
$a = trim($c[1]);
break;
}
}
}
return empty($a) ? false : $a;
}
获取网卡 MAC 地址
网卡的物理地址(MAC)同样可以通过网络配置查询命令获得。在 Windows 系统中,ipconfig /all 是最常用的命令。MAC 地址通常标记为 "Physical Address"。
第2步:定义获取 MAC 地址的函数
此函数直接调用 exec 获取全部网络配置信息,然后逐行查找包含 "Physical" 关键字的行,分割并返回对应的 MAC 地址值。注意:如果服务器有多个网卡,该方法仅返回第一个找到的结果。
function getMACAddress() {
@exec('ipconfig /all', $array);
foreach ($array as $line) {
// 使用 strpos 替代已废弃的 eregi
if (strpos($line, 'Physical') !== false) {
$parts = explode(':', $line);
if (isset($parts[1])) {
return trim($parts[1]);
}
}
}
return false;
}
注意事项与排错
- 权限限制:PHP 运行在 Web 服务器环境下,必须确保
php.ini中的disable_functions未禁用exec、system等函数,否则无法获取系统信息。 - 操作系统差异:上述代码主要针对 Windows 环境(使用
wmic和ipconfig)。在 Linux/Unix 系统中,应改用cat /proc/cpuinfo或ifconfig -a等命令进行相应适配。 - 正则函数替换:原文草稿中使用的
eregi函数在较新版本的 PHP 中已被废弃,代码中已替换为标准的strpos或preg_match以确保持久可用。
以上就是通过 PHP 获取计算机 CPU ID 和 MAC 地址的详细内容,更多关于 PHP 系统级操作资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









