我会使用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。
答案 0 :(得分:4)
是的,sscanf
非常聪明,可以解析它之间的任意数量的空格。您甚至不需要以任何特殊方式指定它。只是做
sscanf($line, '%s%d');
你会得到
Array
(
[0] => MemTotal:
[1] => 1027156
)
不幸的是,PHP手册对于您可以用作格式字符串的内容并不是太完整,但由于它基于UNIX命令,您可以查看其他文档以查找您拥有的选项:
让他们工作虽然有点繁琐。
答案 1 :(得分: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...