Вы не можете запустить sudo из PHP, так как Apache не позволит вам сделать это по соображениям безопасности. Вам нужно реализовать traceroute в PHP внутри вашего кода.
Есть несколько таких реализаций, которые можно найти в открытом доступе.
Смотрите, например:
Создание программы traceroute на PHP, код доступен на github .
Другой подход, позволяющий избежать sudo для traceroute, основан на том факте, что traceroute не должен запускаться с правами root; это просто нуждается в способности CAP_NET_ADMIN
. Чтобы установить это как файловую возможность для всех пользователей, если ваше ядро поддерживает файловые возможности, а модуль безопасности Linux (SELinux, AppArmor) не блокирует его:
setcap CAP_NET_ADMIN+ep /usr/sbin/traceroute
Код PHP может быть очень простым, используя 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);