在Windows上使用PHP获取总可用系统内存

时间:2011-08-30 20:06:10

标签: php windows memory ram

使用PHP,我想获得系统可用的总内存(而不仅仅是免费或已用内存)。

在Linux上,它非常直接。你可以这样做:

$memory = fopen('/proc/meminfo');

然后解析文件。

是否有人知道Windows的等效方法?我对任何建议持开放态度。

编辑:我们有一个解决方案(但StackOverflow不会让我回答我自己的问题):

exec( 'systeminfo', $output );

foreach ( $output as $value ) {
    if ( preg_match( '|Total Physical Memory\:([^$]+)|', $value, $m ) ) {
        $memory = trim( $m[1] );
}

不是最优雅的解决方案,而且速度很慢,但它符合我的需要。

2 个答案:

答案 0 :(得分:6)

您可以通过exec

执行此操作
exec('wmic memorychip get capacity', $totalMemory);
print_r($totalMemory);

这将打印(在我的机器上有2x2和2x4块RAM):

Array
(
    [0] => Capacity
    [1] => 4294967296
    [2] => 2147483648
    [3] => 4294967296
    [4] => 2147483648
    [5] =>
)

您可以使用

轻松对此进行总结
echo array_sum($totalMemory);

然后将给出12884901888.将其转换为Kilo-,Mega-或千兆字节,每个除以1024,例如

echo array_sum($totalMemory) / 1024 / 1024 / 1024; // GB

可以在

中找到查询总RAM的其他命令行方式

另一种编程方式是COM

// connect to WMI
$wmi = new COM('WinMgmts:root/cimv2');

// Query this Computer for Total Physical RAM
$res = $wmi->ExecQuery('Select TotalPhysicalMemory from Win32_ComputerSystem');

// Fetch the first item from the results
$system = $res->ItemIndex(0);

// print the Total Physical RAM
printf(
    'Physical Memory: %d MB', 
    $system->TotalPhysicalMemory / 1024 /1024
);

有关此COM示例的详细信息,请参阅:

您也可以从其他Windows API获取此信息,例如.NET API.


在Windows上还有PECL扩展:

根据文档,它应该返回一个数组,其中包含一个名为total_phys的键,其中包含“总物理内存量。

但是因为它是PECL扩展,所以你首先必须在你的机器上安装它。

答案 1 :(得分:2)

这是一个未成年人(可能更适合SuperUser)的区别,但是在最近的Windows服务中它出现了,我会在这里提供它。问题是关于可用的内存,而不是总物理内存。

exec('wmic OS get FreePhysicalMemory /Value 2>&1', $output, $return);
$memory = substr($output[2],19);

echo $memory;