使用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] );
}
不是最优雅的解决方案,而且速度很慢,但它符合我的需要。
答案 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;