2012-12-04 93 views
0

shell_exec("traceroute IPaddress)回報traceroute to IPaddress (IPaddress), 30 hops max, 40 byte packets獲取列表用PHP啤酒花

如何檢索啤酒花的實際列表,以便我可以告訴哪裏出現了問題?

+1

檢查http://www.adayinthelifeof.nl/2010/07/30/creating-a-traceroute-program-in-php/或http://stackoverflow.com/questions/10965891/hide-command-usage -argument-on-shell-exec-php-in-windows –

+0

我無法得到這個工作 - 無知如何構建帶有參數的命令可能是原因! –

回答

1

這些消息都應該被寫入stderr,而不是常規stdout,所以我不是太確定爲什麼你看到它們出現在輸出中。

相反的shell_exec()我會建議使用exec(),因爲它抓住了兩個輸出和過程的返回代碼:

exec('traceroute example.com 2>&1', $out, $code); 
if ($code) { 
    die("An error occurred while trying to traceroute: " . join("\n", $out); 
} 
print_r($out); 

爲了加快命令一點,你就可以在運行traceroute使用-n選項避免必須爲中間跳進行DNS查找。

請注意,運行traceroute可能需要一段時間;如果你在命令行運行它,你有時可以看到其中有* * *的行,這可能需要很長時間!

+0

這也返回'Array([0] => traceroute到88.97.30.31(88.97.30.31),30跳最大,40字節的數據包) - 什麼定義了變量$ code? –

+0

@NickIredale然後你的'traceroute'搞砸了,它應該在'stderr'上打印這條消息; '$ code'給出了該命令的返回值; 「0」表示沒有錯誤,其他意味着錯誤。 –

+0

啊!打印$ code給1不是0,所以你說它不工作。如果是的話,那麼命令應該給出跳躍列表,應該嗎? –

0

使用exec和看它的第二個參數:

string exec (string $command [, array &$output [, int &$return_var ]]) 

例子:

<?php 

exec('traceroute test.com -m 2', $output); 
var_dump($output); 
+0

謝謝,只是嘗試過,但結果是有效地相同的原始代碼 - 該數組包含只有一個變量 - 數組(1){[0] =>字符串(69)「跟蹤路由到88.97.30.31(88.97。 30.31),最大30跳,40字節數據包「}」,這是traceroute的摘要而不是跳轉列表 –

+0

參見編輯的消息,m參數表示跳數。「traceroute --help」以獲取更多詳細信息 –

+0

編輯後的版本仍然返回相同的數據包數組(1){[0] =>字符串(68)「跟蹤路由到88.97.30.31(88.97.30.31),2跳最大值,40字節包」} –