首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从df -h中捕获特定值--使用PHP的总量

从df -h中捕获特定值--使用PHP的总量
EN

Stack Overflow用户
提问于 2019-06-12 13:24:14
回答 3查看 339关注 0票数 1

如何填充一个变量,以保存在centos上运行df -h --total后从下面提取的内容的总价值。注意:结果不是来自命令行,而是来自php文件。

如何使用PHP只捕获最后一行中的百分比值?

代码语言:javascript
复制
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 20G 685M 20G 4% /
devtmpfs 40G 0 40G 0% /dev
tmpfs 40G 0 40G 0% /dev/shm
tmpfs 40G 177M 40G 1% /run
tmpfs 40G 0 40G 0% /sys/fs/cg
/dev/mapper/rhel-usr 20G 3.2G 17G 16% /usr
/dev/sda2 1014M 223M 792M 22% /boot
/dev/mapper/rhel-opt_mycom 100G 37G 63G 37% /opt/my
/dev/mapper/oradb-nimsdb 2.0T 1.5T 614G 71% /opt/my/data
/dev/mapper/redo-logs 305G 72G 234G 24% /opt/my/data/
/dev/mapper/rhel-home 20G 472M 20G 3% /home
/dev/mapper/rhel-var 20G 1.4G 19G 7% /var
tmpfs 7.9G 0 7.9G 0% /run/user/1000
total 3.6T 2.3T 1.4T 63% -

也就是说,我想要一个值为63%的变量

代码语言:javascript
复制
$variable = 63%
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-12 13:30:43

您可以添加grepawk来提取您想要的信息:

代码语言:javascript
复制
$result = $ssh->exec("df -h --total | grep '^total ' | awk '{print $5}'");

请注意,您需要更改引用类型,这样才能正常工作。只要复制并粘贴上面的内容,你就应该很好。

票数 5
EN

Stack Overflow用户

发布于 2019-06-12 13:31:19

也许您可以根据您的需要修改这个片段:

代码语言:javascript
复制
$data = <<<EOF
Filesystem           1K-blocks      Used Available Use% Mounted on
ubi0_0                  143180     89740     53440  63% /
tmpfs                       64         0        64   0% /dev
tmpfs                   143124        76    143048   0% /tmp
tmpfs                     4096       912      3184  22% /var
tmpfs                       64         0        64   0% /mnt
ubi1_0                  468256     12144    456112   3% /opt/data/settings
EOF;

print_r(array_map(function($line){
    $elements=preg_split('/\s+/',$line);
    return(array(
    'filesystem' => $elements[0],
    '1k-blocks' => $elements[1],
    'used' => $elements[2],
    'available' => $elements[3],
    'use%' => $elements[4],
    'mounted_on' => $elements[5]
    ));
},explode("\n",$data)));

https://gist.github.com/cschaba/4740323

票数 2
EN

Stack Overflow用户

发布于 2019-06-12 13:56:29

对不起,如果我误解了这个问题,我认为这可能是你想要的答案.:)

版本1:

代码语言:javascript
复制
#executes the comand and stores in array
$testExec = exec("df -h --total" ,$testArray);
#moves to the end off the array
$testArrayEnd = end($testExec);
#splits the last line into an array
$stringArray = explode(' ',$testArrayEnd);
foreach($stringArray as $string){
    #checks if the string contains a % 
    if (preg_match("/%/", $string)) {
        #there is only one % so this is what you're looking for
        $percentage = $string;
        var_dump($percentage);
    }
}

PS。@ReynierPM您不需要shell_exec就可以获得完整的输出返回..。你只需要定义一个数组,你就可以把数据存储在.),并授予它不是字符串,但可以通过使用内爆()轻松地将其转换为字符串。

版本2:

抱歉,如果你不同意,但我觉得不舒服,只是编辑@Nazariy的答案,因为我正在增加/改变很多(在这个阶段,请参阅编辑历史:)。

代码语言:javascript
复制
#thanks go out to ReynierPM
#returns string with every entry being separated by a newline 
$output = shell_exec('df -h --total');

$ArrayFull=(array_map(function($line){ /*<-- *¹ & *² */
    $elements=preg_split('/\s+/',$line); /*<--- *4  */>
    return(array(
    'filesystem' => $elements[0],
    '1k-blocks' => $elements[1],
    'used' => $elements[2],
    'available' => $elements[3],
    'use%' => $elements[4],
    'mounted_on' => $elements[5]
    ));
},explode("\n",$output))); /*(<--- *³)*/

#removes bloat
unset($ArrayFull[0]);
#Rebase array keys https://stackoverflow.com/questions/5943149/rebase-array-keys-after-unsetting-elements
$ArrayFull=array_values($ArrayFull);

#if you only want the last value ;)
$lastVallue = end($ArrayFull);

解释:

*1

地图也将其应用于数组中的所有值"array_map -将回调应用于给定数组的元素“。

*面积

我们首先给它一个回调函数,该函数将对每个元素调用,并将变量$line传递给它(我们使用这个函数来存储爆炸所创建的行)。

**

我们使用array_maps来爆炸\n (为每个新行创建一个数组条目)(我们在$data上做了一个意外爆炸)

*4

现在每条线都分开了..。我们将分隔的行拆分为子字符串,并将它们存储在新变量中。preg_split('/\s+/',$line)将$line分割成一个数组,而不必处理多个空格的问题。for‘代表空间。

很抱歉格式化..。编辑后一篇文章:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56563340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档