Get total available system memory with PHP on Windows

試著忘記壹切 提交于 2019-12-03 12:10:05
Gordon

You can do this via exec:

exec('wmic memorychip get capacity', $totalMemory);
print_r($totalMemory);

This will print (on my machine having 2x2 and 2x4 bricks of RAM):

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

You can easily sum this by using

echo array_sum($totalMemory);

which will then give 12884901888. To turn this into Kilo-, Mega- or Gigabytes, divide by 1024 each, e.g.

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

Additional command line ways of querying total RAM can be found in


Another programmatic way would be through 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
);

For details on this COM example, please see:

You can likely get this information from other Windows APIs, like the .NET API., as well.


There is also PECL extension to do this on Windows:

According to the documentation, it should return an array which contains (among others) a key named total_phys which corresponds to "The amount of total physical memory."

But since it's a PECL extension, you'd first have to install it on your machine.

This is a minor (and possibly more suitable for SuperUser) distinction, but as it's come up for me in a recent windows service, I'll provide it here. The question asks about available memory, not total physical memory.

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

echo $memory;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!