shell_exec("traceroute IPaddress)
возвращает traceroute to IPaddress (IPaddress), 30 hops max, 40 byte packets
Как мне получить фактический список прыжков, чтобы я мог сказать, где возникает проблема?
shell_exec("traceroute IPaddress)
возвращает traceroute to IPaddress (IPaddress), 30 hops max, 40 byte packets
Как мне получить фактический список прыжков, чтобы я мог сказать, где возникает проблема?
Эти сообщения должны быть записаны в 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);
Чтобы немного ускорить команду, вы можете использовать опцию -n
при запуске traceroute
, чтобы избежать необходимости выполнять поиск DNS для промежуточных переходов.
Обратите внимание, что запуск traceroute
может занять некоторое время; если вы запустите его в командной строке, вы иногда можете увидеть строки с * * *
в них, что может занять целую вечность!
Array ( [0] => traceroute to 88.97.30.31 (88.97.30.31), 30 hops max, 40 byte packets )
— что определяет переменную $code?
- person Nick Iredale; 04.12.2012
traceroute
испорчен, он должен напечатать это сообщение stderr
; $code
дает возвращаемое значение команды; 0
означает отсутствие ошибок, все остальное означает, что что-то пошло не так.
- person Ja͢ck; 04.12.2012
exec('traceroute example.com 2>&1', $out, $code)
.
- person Ja͢ck; 04.12.2012
Array ( [0] => traceroute to example.com (192.0.43.10), 30 hops max, 40 byte packets [1] => send: Operation not permitted ) 1
, поэтому сервер должен быть настроен для предотвращения этого - я свяжусь со своим хостом и посмотрю, что можно сделать, если что-нибудь
- person Nick Iredale; 04.12.2012
Используйте exec и посмотрите на его второй параметр:
string exec ( string $command [, array &$output [, int &$return_var ]] )
Пример :
<?php
exec('traceroute test.com -m 2', $output);
var_dump($output);
array(1) { [0]=> string(69) "traceroute to 88.97.30.31 (88.97.30.31), 30 hops max, 40 byte packets" }
, которая является сводкой трассировки, а не списком переходов.
- person Nick Iredale; 04.12.2012
array(1) { [0]=> string(68) "traceroute to 88.97.30.31 (88.97.30.31), 2 hops max, 40 byte packets" }
- person Nick Iredale; 04.12.2012