php: isUrlOffline( $url )

function isUrlOffline( $url )
{
	// setup socket with timeout of 0.1 seconds
	// return -1 for error ; false for offline

	$urlpatt = '%http:\/\/([a-z-\.0-9]+)(:(\d+)){0,1}(.*)%i';
	$am = array();
	preg_match($urlpatt, $url, $am);

	if (empty($am[1]))
	{
		return -1;
	}
	$address = gethostbyname($am[1]);
	$service_port = empty($am[3]) ? 80 : $am[3];

	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
	if ($socket < 0)  return -1;

	socket_set_block($socket);
	socket_set_option(
		$socket,SOL_SOCKET, SO_SNDTIMEO
		, array("sec"=>0,"usec"=>100)
	);

	$result = socket_connect($socket, $address, $service_port);
	if ($result < 0 )   return -1;

	$in = "HEAD / HTTP/1.1\\r\\n";
	$in .= "Host: " . $am[1] . "\\r\\n";
	$in .= "Connection: Close\\r\\n\\r\\n";

	socket_write($socket, $in, strlen($in));

	$buf = "";
	while ($out = socket_read($socket, 2048))
	{
		$buf .= $out;
	}
	socket_close($socket);

	return preg_match("%HTTP/.+ 200 OK%",$buf);
}

No Responses to “php: isUrlOffline( $url )”

Responses are currently closed, but you can trackback from your own site.

Comments are closed.