0

我的主要目的是解析通过 PHP 执行的 traceroute 命令返回的数据

$output = shell_exec("traceroute www.xxx.com");
echo $output;

返回的输出是这样的

追踪路线到

www.x.com [173.xx.xx.xx] over a maximum of 30 
hops: 1 1 ms <1 ms <1 ms 192.168.1.1 2 10 ms 10 ms 10 ms 117.xx.xx.xx 
3 11 ms 9 ms 9 ms 218.xx.xx.xx 4 10 ms 11 ms 10 ms 218.xx.xx.xx 5 216 ms 220 
ms 229 ms 59.xx.xx.xx.static.xx.xx.xx [59.xx.xx.xx] 6 203 ms 203 ms 219 ms 
121xx.xx.xx
7 328 ms 371  ms 325 ms 72.xx.xx.xx 8 301 ms 306 ms 313 ms 72.xx.xx.xx 9 
249 ms 251 ms249 ms 72.xx.xx.xx 10 256 ms 254 ms 255 ms sin04s02xx.xx.xx
[173.xx.xx.xx] Trace complete.

我想每次解析或获取输出,

我试过这个

traceroute www.google.com 2>/dev/null | awk 'NR==1

{ print $5;
   exit;
}

这给了我我认为的最大跳数。如果有类似的命令来获取单个输出,例如

1 1 ms <1 ms <1 ms 192.168.1.1
2 10 ms 10 ms 10 ms 117.xx.xx.xx
3 11 ms 9 ms 9 ms 218.xx.xx.xx

也许我可以将它包含在一个循环中。

4

1 回答 1

1

你可以使用popen()

$handle = popen("traceroute www.xxx.com 2>&1", "r");
while(!feof($handle)) {
    $buffer = fgets($handle);
    $buffer = "<p>".$buffer."</p>\n";
    echo $buffer;
}
pclose($handle);
于 2012-10-06T13:40:52.543 回答