One of my clients asked me to monitor her site’s uptime.

While this script is not yet complete, and it should use a CRON job and a mail() function, here’s how to check for uptime and current HTTP status code:

<?php
$toCheckURL = 'http://getbutterfly.com/'; // The domain name of the site you want to check

// This all sets up the CURL actions to check the page
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $toCheckURL);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //follow up to 10 redirections - avoids loops
$data = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Get the HTTP Code

// Get final redirected URL, will be the same if URL is not redirected
$new_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
curl_close($ch);

// Array of HTTP status codes. Trim down if you would like to.
$codes = array(
	0 => 'Domain Not Found',
	100 => 'Continue',
	101 => 'Switching Protocols',
	200 => 'OK',
	201 => 'Created',
	202 => 'Accepted',
	203 => 'Non-Authoritative Information',
	204 => 'No Content',
	205 => 'Reset Content',
	206 => 'Partial Content',
	300 => 'Multiple Choices',
	301 => 'Moved Permanently',
	302 => 'Found',
	303 => 'See Other',
	304 => 'Not Modified',
	305 => 'Use Proxy',
	307 => 'Temporary Redirect',
	400 => 'Bad Request',
	401 => 'Unauthorized',
	402 => 'Payment Required',
	403 => 'Forbidden',
	404 => 'Not Found',
	405 => 'Method Not Allowed',
	406 => 'Not Acceptable',
	407 => 'Proxy Authentication Required',
	408 => 'Request Timeout',
	409 => 'Conflict',
	410 => 'Gone',
	411 => 'Length Required',
	412 => 'Precondition Failed',
	413 => 'Request Entity Too Large',
	414 => 'Request-URI Too Long',
	415 => 'Unsupported Media Type',
	416 => 'Requested Range Not Satisfiable',
	417 => 'Expectation Failed',
	500 => 'Internal Server Error',
	501 => 'Not Implemented',
	502 => 'Bad Gateway',
	503 => 'Service Unavailable',
	504 => 'Gateway Timeout',
	505 => 'HTTP Version Not Supported'
);

// Check if we have a valid HTTP code from the above list
if(isset($codes[$http_code])) {
	echo 'Website returned status code: ' . $http_code . ' - ' . $codes[$http_code] . '<br>';
	// Get the headers from the $data to the $matches variable
	preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/", $data, $matches);
	array_pop($matches[1]); // Remove the last status that we just displayed above which should be 200
	if(count($matches[1]) > 0) {
		// Loop through all other matches to see what other status codes we got
		foreach ($matches[1] as $c) {
			echo $c . ' - ' . $codes[$c] . '<br>';
		}
	}
	// Can use this to check if the URL is still the same as you checked
	// Or if the server has moved
	if($toCheckURL != $new_url) {
		echo 'URL has changed to: ' . $new_url;
	}
}

// This is just to show you the headers of the website you are checking
echo '<hr><pre>';
	var_dump($data);
echo '</pre>';
?>

Further steps would involve adding the data to a database and creating charts and graphs. Easier said than done :)

Maybe I’ll make this my next project.



Read More on the Same Subject


Read our comment policy before commenting!


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>