Url validation

Ever wished users entered valid Urls ?

Well why not force them ?

The problem

Usually web site owner want to extract all the possible information form their users and mor often want the information provided to be accurate!

Once one ofe those owners was nagging me becaus users where entering invalid urls like www./&%$#.com so I implemented a routine to validate if the Url exists

The solution

Fortunately Php has a pretty good networking support, as result you can create several network applications like, email clients, proxies, ftp clients, almost any sockets application

Step by step method :

  • Connect to server

We connect using fsockopen() function wicht basicly connects to the server and returns a file resource allowing us to use php file handling functions

  • request a page

We construct the HTTP header and ask for the default page

  • receiving the server response

Now we get the server response.

The first line is the status code so we are only interested in that line and can close the connection

  • analyzing the server response

check the header for a “200 OK” message

The Code

function validUrl($host, $page =‘/’, $port=80) {
	//server connection
	$fp= fsockopen($host,$port,$errno, $errstr, 30);
	if ($fp) {//ok, we are connected
		//lets create the HTTP header to send
		$header = "GET $page HTTP/1.0\r\n";
		$header .= "Connection: Close\r\n\r\n";
 
		//sending it
		fwrite($fp, $header);
 
		//getting server response (just one line)
		$ret=fgets($fp);
 
		//see if we got an 200 OK status
		if (ereg(‘200 OK’,$ret)) {
			fclose($fp);
			return true;
		}
		fclose($fp);
	}
	return false;
}
 
if (validUrl(‘www.sapo.pt’)){
	print ‘Valid’;
}else{
	print ‘Invalid’;
}

Let me know what you think, leave a comment

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>