<?php function get_substring($string, $start, $end){ $string = ' ' . $string; $ini = strpos($string, $start); if ($ini == 0) return ''; $ini += strlen($start); $len = strpos($string, $end, $ini) - $ini; return substr($string, $ini, $len); } function ip2geo ($host) { @$data = file_get_contents('http://ipinfo.io/'.$host); if ($data) { $data = json_decode($data); return $data->loc; } else { return ""; } } $data = array("points" => array()); $traceroute = ""; function traceroute() { global $data, $traceroute; $traceroute = shell_exec("traceroute google.com"); $first = true; foreach(preg_split("/((\r?\n)|(\r\n?))/", $traceroute) as $line){ if ($first) { $first = false; continue; } $ipgeo = explode(",", ip2geo(get_substring($line, "(", ")"))); $coordinates = array('x' => $ipgeo[0], 'y' => $ipgeo[1]); array_push($data['points'], $coordinates); } } function raw_output() { global $traceroute; echo json_encode($traceroute); } function json_output() { global $data; echo json_encode($data); } ?>