我找到了一段代码,通过php显示对服务器的ping,我想知道是否有可能实现不同的输出,但我很难确定逻辑。
代码:
<?php
$cmd = "ping 8.8.8.8 -c 1";
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
flush();
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre>";
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
print $s;
}
}
echo "</pre>";
?>
当前输出:
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=54 time=28.278 ms
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 28.278/28.278/28.278 ms
通缉输出:
我只想要ms值或“time”
28.278
试验:
我试图通过运行它来获取“$s
”或“$pipes
”变量/数组的值,包括对数组值“[1]
”等的一些试验以下代码:
str_replace("time=","@@",$test_stringget_ping_res);
str_replace(" ms","@@",$test_stringget_ping_res);
但我得到“无法打开规则文件”。
答案 0 :(得分:2)
您可以使用以下preg_match()
。
preg_match('/time=(.*?) ms/', $s, $m );
print $m[1];
您的代码如下:
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
preg_match('/time=(.*?) ms/', $s, $m );
print $m[1];
print $s;
}
}
说明:简单捕捉time=
和ms
之间的所有内容。
<强> Ideone Demo 强>
查看preg_match()文档以供使用。
答案 1 :(得分:1)
您可以将命令更改为:
ping -c 1 8.8.8.8 | tail -1 | cut -d/ -f 5