Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上使用PHP获取总可用系统内存_Php_Windows_Memory_Ram - Fatal编程技术网

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

在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

使用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] );
}

这不是最优雅的解决方案,而且速度非常慢,但它适合我的需要。

您可以通过
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;