2

我会使用sscanf()或(最好)fscanf()扫描/proc/meminfo并返回MemTotal

MemTotal:        1027156 kB
MemFree:          774596 kB
Buffers:           23816 kB
Cached:           198300 kB

由于实际数字之间的空格MemTotal:数不同,我想知道是否sscanf()足够聪明,可以解析如下内容:

sscanf($line, "MemTotal:\s+%d");

填充和对齐说明符也sprintf()可以使用sscanf()吗?

我会自己尝试一下,但我没有可用的开发/Linux 环境 ATM。

4

2 回答 2

4

是的,sscanf它足够聪明,可以用任意数量的空格来解析它。您甚至不需要以任何特殊方式指定它。做就是了

sscanf($line, '%s%d');

你会得到

Array
(
    [0] => MemTotal:
    [1] => 1027156
)

不幸的是,PHP 手册对您可以用作格式字符串的内容并不太完整,但由于它基于 UNIX 命令,您可以查看其他文档以找到您有哪些选项:

让他们工作有点繁琐。

于 2013-05-14T07:58:59.260 回答
1

你把问题复杂化了。我推荐这种方法来转换/proc/meminfo一个面向未来的关联数组:

$input = file_get_contents('/proc/meminfo');
$data = [];
$hits = preg_match_all('/^(.*):\s+([0-9]+)/m', $input, $matches);
for($i = 0; $i != $hits; $i++)
    $data[$matches[1][$i]] = $matches[2][$i];
var_dump($data);

样本输出

array(45) {
  ["MemTotal"]=>
  string(6) "508856"
  ["MemFree"]=>
  string(5) "33984"
  ["Buffers"]=>
  string(6) "189124"
  ["Cached"]=>
  string(6) "207512"
  ...etc...
于 2013-05-14T07:34:17.697 回答