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

Posted

技术标签:

【中文标题】在 Windows 上使用 PHP 获取总可用系统内存【英文标题】:Get total available system memory with PHP on Windows 【发布时间】:2011-11-07 03:03:32 【问题描述】:

使用 php,我想获取系统可用的总内存(不仅仅是可用内存或已用内存)。

在 Linux 上这很简单。你可以这样做:

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

然后解析文件。

有人知道 Windows 的等效方法吗?我愿意接受任何建议。

编辑:我们有一个解决方案(但 *** 不允许我回答我自己的问题):

exec( 'systeminfo', $output );

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

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

【问题讨论】:

***.com/questions/1455379/get-server-ram-with-php 旁注:PHP 有一个内置的内存限制,因此机器的 RAM 大小不一定是您的脚本可用的 RAM(除非您禁用内存限制) systeminfo 太慢了——如果脚本有用户交互可能不是一个好主意 【参考方案1】:

您可以通过exec

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

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

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

你可以很容易地通过使用来总结这个

echo array_sum($totalMemory);

然后将得到 12884901888。要将其转换为千字节、兆字节或千兆字节,请分别除以 1024,例如

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

查询总内存的其他命令行方法可以在

中找到 https://superuser.com/questions/315195/is-there-a-command-to-find-out-the-available-memory-in-windows

另一种编程方式是通过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 示例的详细信息,请参阅:

http://php.net/manual/en/book.com.php MSDN: Constructing a Moniker String MSDN: Win32_ComputerSystem class

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


还有一个 PECL 扩展可以在 Windows 上执行此操作:

win32_ps_stat_mem — Retrieves statistics about the global memory utilization.

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

但由于它是一个 PECL 扩展,您首先必须在您的机器上安装它。

【讨论】:

【参考方案2】:

这是一个次要的(可能更适合超级用户)的区别,但由于它在最近的 Windows 服务中出现,我将在此处提供它。该问题询问的是可用内存,而不是总物理内存。

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

echo $memory;

【讨论】:

以上是关于在 Windows 上使用 PHP 获取总可用系统内存的主要内容,如果未能解决你的问题,请参考以下文章

如何在PHP中获取系统信息?

Android获取SD卡总容量,可用大小,机身内存总容量及可用大小的系统方法

PHP如何在windows下获取计算机的cpu和内存

如何获取 Posix 系统中的总可用磁盘空间?

使用 Prometheus 获取总磁盘空间和可用磁盘空间

当只有链接可用时如何获取文件的总文件大小