http://www.codediesel.com/php/ping-a-server-using-php/

http://www.dynamicdrive.com/forums/showthread.php?t=37370

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=8&txtCodeId=1786

http://www.theworldsend.net/
http://www.theworldsend.net/ping_src.php

// Checksum calculation function
function icmpChecksum($data) {
    if (strlen($data)%2) $data .= "\x00";

    $bit = unpack('n', $data);
    $sum = array_sum($bit);

    while ($sum >> 16) $sum = ($sum >> 16) ($sum & 0xffff);

    return pack('n', ~$sum);
}

// Making the package
$type = "\x08";
$code = "\x00";
$checksum = "\x00\x00";
$identifier = "\x00\x00";
$seqNumber = "\x00\x00";
$data = "Scarface";
$package = $type.$code.$checksum.$identifier.$seqNumber.$data;
$checksum = icmpChecksum($package); // Calculate the checksum
$package = $type.$code.$checksum.$identifier.$seqNumber.$data;

// And off to the sockets
$socket = socket_create(AF_INET, SOCK_RAW, 1);
socket_connect($socket, "www.google.com", null);

// If you’re using below PHP 5, see the manual for the microtime_float
// function. Instead of just using the microtime() function.
$startTime = microtime(true);
socket_send($socket, $package, strLen($package), 0);
if (socket_read($socket, 255)) {
    echo round(microtime(true) - $startTime, 4) .' seconds';
}
socket_close($socket);