php如何取得服务器硬件信息?服务器硬件信息获取方法
- 虚拟主机
- 2025-12-16
- 3
在PHP中获取服务器硬件信息是一个常见的需求,特别是在系统监控、性能优化或服务器管理场景中,PHP提供了多种方法来获取这些信息,包括使用内置函数、调用系统命令或读取系统文件,本文将详细介绍如何通过PHP获取CPU、内存、磁盘、网络等硬件信息,并提供实际代码示例和注意事项。
获取CPU信息
CPU是服务器的核心组件,获取CPU信息可以帮助我们了解处理器的型号、核心数、使用率等,在Linux系统中,可以通过读取/proc/cpuinfo文件来获取CPU信息,PHP中可以使用file_get_contents()或fopen()函数来读取该文件。
$cpuInfo = file_get_contents('/proc/cpuinfo'); $processors = explode("nn", $cpuInfo); foreach ($processors as $processor) { $details = explode("n", $processor); $cpuData = []; foreach ($details as $detail) { if (strpos($detail, ':') !== false) { $keyValue = explode(':', $detail, 2); $cpuData[trim($keyValue[0])] = trim($keyValue[1]); } } print_r($cpuData); }
上述代码会输出每个处理器的详细信息,包括型号、主频、缓存等,在Windows系统中,可以通过WMI(Windows Management Instrumentation)来获取CPU信息,但需要安装WMI扩展或使用COM对象。

获取内存信息
内存信息包括总内存、已用内存、空闲内存等,在Linux系统中,可以通过读取/proc/meminfo文件来获取内存信息。
$memInfo = file_get_contents('/proc/meminfo'); $memData = []; $lines = explode("n", $memInfo); foreach ($lines as $line) { if (strpos($line, ':') !== false) { $keyValue = explode(':', $line, 2); $memData[trim($keyValue[0])] = trim($keyValue[1]); } } // 解析内存数据(单位为KB) $totalMem = intval($memData['MemTotal']); $freeMem = intval($memData['MemFree']); $usedMem = $totalMem $freeMem; echo "总内存: " . ($totalMem / 1024 / 1024) . " GBn"; echo "已用内存: " . ($usedMem / 1024 / 1024) . " GBn"; echo "空闲内存: " . ($freeMem / 1024 / 1024) . " GBn";
在Windows系统中,可以通过COM对象调用WMI来获取内存信息:
$wmi = new COM("WbemScripting.SWbemLocator"); $service = $wmi>ConnectServer(".", "rootcimv2"); $memory = $service>ExecQuery("SELECT * FROM Win32_ComputerSystem"); foreach ($memory as $mem) { echo "总内存: " . ($mem>TotalPhysicalMemory / 1024 / 1024 / 1024) . " GBn"; }
获取磁盘信息
磁盘信息包括磁盘分区、容量、使用情况等,在Linux系统中,可以通过读取/proc/mounts或调用df命令来获取磁盘信息。

$diskInfo = shell_exec('df h'); echo $diskInfo;
上述命令会输出磁盘分区的容量、已用空间、可用空间等信息,在Windows系统中,可以通过WMI获取磁盘信息:
$disks = $service>ExecQuery("SELECT * FROM Win32_LogicalDisk"); foreach ($disks as $disk) { echo "盘符: " . $disk>DeviceID . "n"; echo "总容量: " . ($disk>Size / 1024 / 1024 / 1024) . " GBn"; echo "可用空间: " . ($disk>FreeSpace / 1024 / 1024 / 1024) . " GBn"; }
获取网络信息
网络信息包括IP地址、网卡名称、流量等,在Linux系统中,可以通过读取/proc/net/dev文件来获取网络接口信息。

$netInfo = file_get_contents('/proc/net/dev'); $lines = explode("n", $netInfo); foreach ($lines as $line) { if (strpos($line, ':') !== false) { $keyValue = explode(':', $line, 2); $interface = trim($keyValue[0]); $stats = preg_split('/s+/', trim($keyValue[1])); echo "接口: " . $interface . "n"; echo "接收字节: " . $stats[0] . "n"; echo "发送字节: " . $stats[8] . "n"; } }
在Windows系统中,可以通过WMI获取网络信息:
$networks = $service>ExecQuery("SELECT * FROM Win32_NetworkAdapter"); foreach ($networks as $network) { echo "网卡名称: " . $network>Name . "n"; echo "MAC地址: " . $network>MACAddress . "n"; }
注意事项
- 权限问题:读取系统文件或执行系统命令需要足够的权限,通常需要以root或管理员身份运行PHP脚本。
- 跨平台兼容性:不同操作系统的文件路径和命令可能不同,需要根据实际情况调整代码。
- 性能影响:频繁读取系统文件或执行命令可能会影响服务器性能,建议合理使用缓存或定时任务。
- 安全性:执行系统命令时要注意防止命令载入攻破,建议使用escapeshellarg()函数对参数进行转义。
相关问答FAQs
Q1: 如何在PHP中获取CPU使用率?
A1: 在Linux系统中,可以通过读取/proc/stat文件计算CPU使用率。
$stat1 = file_get_contents('/proc/stat'); sleep(1); $stat2 = file_get_contents('/proc/stat'); $stat1 = explode(" ", preg_replace("/ +/", " ", $stat1)); $stat2 = explode(" ", preg_replace("/ +/", " ", $stat2)); $diff = array_diff($stat2, $stat1); $cpuPercent = 0; if (count($diff) >= 4) { $cpuPercent = 100 ($diff[4] / array_sum(array_slice($diff, 0, 4))) * 100; } echo "CPU使用率: " . $cpuPercent . "%n";
在Windows系统中,可以通过WMI查询Win32_Processor类的LoadPercentage属性获取CPU使用率。
Q2: 如何在PHP中获取服务器温度?
A2: 获取服务器温度通常需要硬件支持,如lmsensors(Linux)或Open Hardware Monitor(Windows),在Linux系统中,可以通过调用sensors命令并解析输出:
$tempInfo = shell_exec('sensors'); echo $tempInfo;
在Windows系统中,可以通过COM对象调用Open Hardware Monitor的API,但需要安装相应的软件和扩展,需要注意的是,PHP本身不直接支持硬件温度读取,通常需要依赖外部工具或扩展。