Allora... inutile dire che trovandomi ancora su aruba purtroppo sono costretto a inventarmi cose turpi...
In attesa di metterci la macchina dedicata e quindi poter tranquillamente eseguire tutte le fork che si vuole mi sono incuriosito e pensando che sulla faccia della terra siamo tantissimi qualcuno alla falsa funzione ping ci doveva aver gia' pensato...
Dunque vi propongo questa direttamente dai commenti di php.net alla voce sockets.
Codice PHP:
<?php
// Script created by telefoontoestel
// for info of some kind please send an email to
// telefoontoestel at officexpert dot digitaal dot biz
// get_microtime() function copied from php.net: function microtime() user contributes
// get_microtime function
function get_microtime(){
list($usec, $sec) = @split(" ", microtime());
return ((float)$usec + (float)$sec);
}
// end of get_microtime function
// ping function
function ping($server, $num_pings=4, $size=32, $time_out=15) {
$data = "";
if(!is_int($num_pings) || $num_pings < 0) $num_pings = 4;
if(!is_int($size) || $size < 0) $size = 32;
if(!is_int($time_out) || $time_out < 0) $time_out = 15;
$results = Array();
for($i = 0; $i < $size; $i++){
$data .= "\0";
}
$server_ip = gethostbyname($server);
$server_name = $server;
if($server_ip != $server_name) $results[0]["server_name"] = $server_name." [".$server_ip."]";
else $results[0]["server_name"] = $server_ip;
$results[0]["server_ip"] = $server_ip;
$results[0]["bytes"] = $size;
for($i = 1; $i <= $num_pings; $i++){
$start_timer = get_microtime();
if(($handle = @fsockopen("udp://".$server_ip, 7, $errno, $errstr, $time_out)) == false)
if(($handle = @fsockopen($server_ip, 7, $errno, $errstr, $time_out)) == false){
$results[$i]["bytes"] == 0;
$results[$i]["time"] == -1;
continue;
}
@fputs($handle, $data, $size);
$results[$i]["bytes"] = @fgets($handle, $size);
$results[$i]["time"] = round((get_microtime() - $start_timer) * 1000);
$start_timer = 0;
@fclose($handle);
}
return $results;
}
// end of ping function
if(($server = $_GET["server"]) == false) $server = "127.0.0.1";
$result = ping($server,1,8);
$lost = 0;
$received = 0;
$send = sizeof($result) - 1;
$max_time = 0;
$min_time = 15000;
$avg_time = 0;
$total_time = 0;
print "Pinging ".$result[0]["server_name"]." with ".$result[0]["bytes"]." bytes of data:
\n";
for($i = 1; $i < sizeof($result); $i++){
if($result[$i]["time"] == -1){
print "Request timed out
\n";
$lost++;
continue;
}
$total_time += $result[$i]["time"];
$received++;
if($result[$i]["time"] > $max_time) $max_time = $result[$i]["time"];
else if($result[$i]["time"] < $min_time) $min_time = $result[$i]["time"];
print "Reply from ".$result[0]["server_ip"].": bytes=".$result[0]["bytes"]." time=".$result[$i]["time"]."ms
\n";
}
$avg_time = round($total_time / $send);
print "
\n";
print "Ping statistics for ".$result[0]["server_ip"].":
\n";
print "Packets: Sent = ".$send.", Received = ".$received.", Lost = ".$lost." (".round((100 / $send) * $lost)."% loss)
\n";
print "Approximate roundtrip in milli-seconds:
\n";
print "Minimum = ".$min_time."ms, Maximum = ".$max_time."ms, Average = ".$avg_time."ms
\n";
?>
Sul mio comp funziona molto bene, sfrutta il sistema dell'invio/ricezione che volevo usare io ma via porte udp mi pare di capire... solo come faccio a farla funzionare su altri webserver?? Stranamente aruba nn fa girare il tutto nemmeno specificando come destinazione se stesso... va in timeout