在Windows上使用PHP获取总可用系统内存
使用PHP,我希望获得系统可用的总内存(而不仅仅是可用或已用的内存) 在Linux上,这非常简单。你可以做:在Windows上使用PHP获取总可用系统内存,php,windows,memory,ram,Php,Windows,Memory,Ram,使用PHP,我希望获得系统可用的总内存(而不仅仅是可用或已用的内存) 在Linux上,这非常简单。你可以做: $memory=fopen('/proc/meminfo') 然后解析文件 有人知道Windows的等效方法吗?我愿意接受任何建议 编辑:我们有一个解决方案(但StackOverflow不让我回答我自己的问题): exec( 'systeminfo', $output ); foreach ( $output as $value ) { if ( preg_match( '|T
$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] );
}
这不是最优雅的解决方案,而且速度非常慢,但它适合我的需要。您可以通过exec
执行此操作:
exec('wmic memorychip get capacity', $totalMemory);
print_r($totalMemory);
这将打印(在我的具有2x2和2x4块RAM的机器上):
您可以使用
echo array_sum($totalMemory);
然后将得到12884901888。要将其转换为千字节、兆字节或千兆字节,请分别除以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(如)获取此信息
还有一个PECL扩展可以在Windows上执行此操作:
根据文档,它应该返回一个数组,其中包含一个名为total_phys
的键,该键对应于“总物理内存量”
但由于它是一个PECL扩展,您必须首先在您的计算机上安装它。这是一个次要的区别(可能更适合超级用户),但由于它是在最近的windows服务中为我提出的,我将在这里提供它。问题是关于可用内存,而不是总物理内存
exec('wmic OS get FreePhysicalMemory /Value 2>&1', $output, $return);
$memory = substr($output[2],19);
echo $memory;
旁注:PHP有一个内置的内存限制,所以机器的RAM大小不一定是脚本可用的RAM(除非禁用内存限制)。systeminfo速度非常慢——如果脚本有用户交互,这可能不是一个好主意
exec('wmic OS get FreePhysicalMemory /Value 2>&1', $output, $return);
$memory = substr($output[2],19);
echo $memory;