All pastes #3058702 Raw Edit

parse ping output

public unlisted php v1 · immutable
#3058702 ·published 2015-07-12 17:07 UTC
rendered paste body
#!/usr/bin/env php<?$pingTarget = "google.com";$pingCount = 4;$output = shell_exec("ping -c".escapeshellarg((int)$pingCount)." ".escapeshellarg($pingTarget));if(empty($output)) {	echo "err: most likely invalid / unreachable domain";	exit(1);}//grab each ping line$pingLineRegex = "/([0-9]+) bytes from ([^\s]+)(?: \((.+)\))?: icmp_seq=([0-9]+) ttl=([0-9]+) time=([0-9\.]+) ms/";//grab aggregated results @ btm$pingResultRegex = $re = "/--- (.+) ping statistics ---\\n([0-9]+) packets transmitted, ([0-9]+)(?: packets)? received, ([0-9\\.]+)% packet loss(?:, time ([0-9]+)ms)?\\n(?:round\\-trip|rtt)? min\\/avg\\/max\\/(?:stddev|mdev)? = ([0-9\\.]+)\\/([0-9\\.]+)\\/([0-9\\.]+)\\/([0-9\\.]+) ms/";preg_match_all($pingLineRegex, $output, $pingLineMatches);$pings = array();//array[0] contains each matched line entirely//use this to grab the count$pingCount = count($pingLineMatches[0]);for($i=0;$i<$pingCount;$i++) {	$pings[] = array(		"bytes" => $pingLineMatches[1][$i],		"host" => $pingLineMatches[2][$i],		"ip" => $pingLineMatches[3][$i] ?: $pingLineMatches[2][$i],		"icmp_req" => $pingLineMatches[4][$i],		"ttl" => $pingLineMatches[5][$i],		"time" => $pingLineMatches[6][$i],	);}preg_match_all($pingResultRegex, $output, $pingResultMatches);$pingStatistics = array(	"host" => $pingResultMatches[1],	"tx" => $pingResultMatches[2],	"rx" => $pingResultMatches[3],	"loss" => $pingResultMatches[4],	"time" => empty($pingResultMatches[5][0]) ? array(0) : $pingResultMatches[5],	"min" => $pingResultMatches[6],	"avg" => $pingResultMatches[7],	"max" => $pingResultMatches[8],	"mdev" => $pingResultMatches[9]);var_dump($pings);var_dump($pingStatistics);?>