PING Packet Internet Grouper in PHP con fsockopen ()
Un Ping è prettamente utilizzato per verificare la presenza e la raggiungibilità di un altro computer connesso in rete e per misurare le latenze di trasmissione di rete.
Per stabilire una connessione con un determinato server esterno PHP ci da la possibilità di utilizzare fsockopen().
Quello che fa fsockopen() è avviare una connessione socket alla risorsa specificata dal bersaglio server to server.
fsockopen ($domain, 80, $errno, $errstr, 10);
Restituisce un puntatore a file che può essere utilizzato insieme alle altre funzioni di file come fgets() , fgetss() , fwrite() , fclose() , e feof().
Se la chiamata non riesce, viene restituito FALSE e se gli opzionali errno e errstr argomenti sono presenti, vengono impostati per indicare l’effettivo errore di sistema che si è verificato nel livello di sistema connect() chiamata.
A seconda dell’ambiente, il dominio Unix o il timeout di connessione opzionali potrebbero non essere disponibili.

PING è acronimo di Packet Internet Grouper consiste in un programma utilizzato per misurare il ritardo di trasmissione dati delle connessioni a Internet da postazione fissa, vale a dire il tempo necessario per trasmettere dati di piccole dimensioni verso la destinazione, espresso in millisecondi (ms).
Esempio di connessione con fsockopen()
$fp = fsockopen("www.example.it", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br>\n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); }
Creaiamo un piccolo form per l’inserimento del dominio che ci interessa verificare lo stato UP – DOWN:
<?php // Calcolo del tempo di risposta function pingDomain($domain) { $starttime = microtime(true); $sock = @fsockopen ($domain, 80, $errno, $errstr, 10); $stoptime = microtime(true); $status = 0; if (!$sock) $status = -1; // Sito down o sconosciuto else { fclose($sock); $status = ($stoptime - $starttime) * 1000; $status = floor($status); } return $status; } ?> <html> <body> <form action="?php $PHP_SELF ?>" method="post" name="domain"> <table cellpadding='4' cellspacing='0' border='0'> <tr><td>Nome del dominio:</td> <td><input name="domainname" type="text" size=30 ></td> <td><input type="submit" name="submitBtn" value="Ping"></td> </tr> </table> </form> <?php // Verifica sul pulsante Ping if (isset($_POST['submitBtn'])){ $domainbase = (isset($_POST['domainname'])) ? $_POST['domainname'] : ''; $domainbase = str_replace("http://","",strtolower($domainbase)); $status = pingDomain($domainbase); if ($status != -1) echo "http://$domainbase<br/>stato = <font color='green'>ONLINE</font><br/>ping = $status ms"; else echo "http://$domainbase<br>stato = <font color='red'>OFFLINE<br/> Controlla Nome Dominio: </font>"; } ?> </body> </html>