Use Curl and PHP to check if website is up or moved

Using the below code you can check to see if a website is up or not. There is an array of various HTTP codes that it can check for. The code will also determine if the website has something like a 301 redirect and then produce the redirected URL. This could be useful for link directories that want to check for URL’s that are no longer active or update their links if the URL has changed. With this code we are just showing the status code and then parsing out all status codes to show later on in the script. The script then compares the URL you are checking vs what the URL that the CURL script ended up on to determine if it was moved. The very last bit of this code is showing you the HTTP headers from the CURL request for viewing purposes only and can be deleted.

<?php
$toCheckURL = "http://www.wlscripting.com/tutorial/67"; // 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 now 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>';
?>

I have commented the code a lot so you should have no trouble modifying the code.

  • Facebook
  • Digg
  • del.icio.us
  • Google Bookmarks
  • BlinkList
  • FriendFeed
  • LinkedIn
  • MySpace
  • Slashdot
  • StumbleUpon
  • Twitter
  • Yahoo! Bookmarks
  • Add to favorites
  • email

One Response to “Use Curl and PHP to check if website is up or moved”

  1. Why use URL shortening services when you can make your own | Alan Yeung Says:

    [...] If you wanted to be extremely clever then you could check the long URL before hashing it. Here is a recent article about some cUrl code which does exactly [...]


Switch to our mobile site