Dynadot

PHP: Bulk domain availability check!

Spaceship Spaceship
Watch
PHP: Bulk domain availability check! [UPDATED]

This is something i was going to start however i don't really have time, so i have whipped up a quick script for you guys to use on your own site or just for personal use.

The script has been tested quickly tonight as i want to go to bed lol. I hope it is of some use.

Demo: Now offline sorry.


UPDATED CODE (Revision 6): (18/02/07)


Download everything here!

.ORG support removed due to a block from the WHOIS server (PIR)

- .pt support fixed!

- Added "save results as text file" feature - requested.

- Code shortened

- Added .in support
- Bug fixes

- Added .tv domain support - requested

- Other bug fixes (again ;))

- Will now output result before checking next domain (much faster)
- Added .mobi support - requested

- Other bug fixes

PHP:
<?php
set_time_limit(0);
ob_start();
/* 	--------	Bulk domain availablity check script (Revision 4) ------------		
[																					
[ 	Created by "Matthew." (#45276) @ http://namepros.com / http://toomanylines.com		
[	Feel free to modify/use however you wish,										
[	but keep credit comments in upon distribution.								
*/

include 'inc/dnservers.php';

function save_file($status) 
{
	global $filename, $domain, $extension;
	
	$domain = trim($domain);
	
	$file_handle = fopen($filename . "_$status.txt", 'a+') or trigger_error('Cannot open or create file (chmod?)', E_USER_WARNING);
	
	if($status == 'invalid' && $extension == 'org') { $status .= ' (.org WHOIS prevents request)'; }
				
	if(!fwrite($file_handle, $domain . " is $status\n"))
	{
		trigger_error('Results for ' . $domain . ' could not be written.', E_USER_WARNING);
	}
	
	fclose($file_handle);	
}

function return_status($domain, $status)
{	
	global $extension, $filename;

	
	$file = $filename;
	$domain = trim($domain);
	
	if(isset($_POST['save']))
	{
			save_file( $status );
	}
	else
	{	
		$color = ($status == 'available') ? 'green' : 'red';
		if($status == 'invalid' && $extension == 'org') { $status .= ' (.org WHOIS prevents request)'; }	
			
		echo "<div style=\"color: $color\">$domain is $status!</div>";
	}
}	
	
if(isset($_POST['submit']))
{
	$filename = 'saves/' . mt_rand(5, 9999999999);
		
	if(strlen($_POST['domains']) > 0)
	{

		$domains = explode("\n", $_POST['domains']);
		
		echo '<h1>Checking ' . count($domains) . ' domains</h1><br />';
		echo (isset($_POST['save'])) ? 'Preparing results, please wait...<br /><br />' : null;
		
		foreach($domains as $domain)
		{
			unset($buffer); // clean buffer - prevents problems
					
			// (replaced str_replace)	
			preg_match('@^(http://www\.|http://|www\.)?([^/]+)@i', $domain, $matches);
			$domain = $matches[2];
			
			$tld = explode('.', $domain, 2);
			$extension = strtolower(trim($tld[1]));
			
			if(strlen($domain) > 0 && array_key_exists('.' . $extension, $ext))
			{
				$server = $ext['.' .$extension][0];
				
				$sock = fsockopen($server, 43) or die('Error Connecting To Server:' . $server);
				fputs($sock, "$domain\r\n");
				
				while( !feof($sock) )
				{
				  	$buffer .= fgets($sock,128);
				}
			
				fclose($sock);
				if($extension == 'org') echo nl2br($buffer);
				
				if(eregi($ext['.' . $extension][1], $buffer)) { return_status($domain, 'available'); }
				
				else { return_status($domain, 'taken'); }
			}
			else
			{
				if(strlen($domain) > 0)	 { return_status($domain, 'invalid'); }
			}
		
			ob_flush(); // output before checking next domain
			flush();
			sleep(0.1);
		}
		
		if(isset($_POST['save']) && count($domains) > 0)
		{
			echo 'Check completed, your results can be found below:';
		
			if(file_exists($filename . '_available.txt'))
			{
				echo '<br /><a href="' . $filename . '_available.txt">Available domains</a>';
			}
			
			if(file_exists($filename . '_taken.txt'))
			{
				echo '<br /><a href="' . $filename . '_taken.txt">Taken domains</a>';
			}
			else
			{
				echo '<br />0 taken domains found';
			}
			
			if(file_exists($filename . '_invalid.txt'))
			{
				echo '<br /><a href="' . $filename . '_invalid.txt">Invalid domains (could not be checked)</a>';
			}
		}	
	}
	else
	{
		echo 'You need to enter one or more domains!';
	}
} 
else
{
	?>
<div style="text-align: center">
	<form action="index.php" method="post">
		<textarea name="domains" cols="100" rows="20"></textarea>
		<br /><input type="checkbox" name="save" value="save" /> Save results as text file?<br />
		<br /><input type="submit" name="submit" value="Check Availability" style="font-size: 30pt;" />
		
	</form>
</div>
	<?php
}
?>


Instructions:

Unzip, Upload, CHMOD "saves" to 777, use!



Supported extensions are:

.com
.net
.biz
.info
.co.uk
.co.ug
.or.ug
.nl
.tv
.mobi
.in

.ro
.com.au
.ca
.org.uk
.name
.us
.ac.ug
.ne.ug
.sc.ug
.ws
.be
.com.cn
.net.cn
.org.cn
.no
.se
.nu
.com.tw
.net.tw
.org.tw
.cc
.pl
.pt

It is not coded well but this was started very early in the morning so i have an excuse lol. It works so hey ;)

Enjoy.
 
Last edited:
17
•••
The views expressed on this page by users and staff are their own, not those of NamePros.
ya nno problem.. it was just a recommendation .. anyways thanks for sharing such a gr8 script

------------

i decided to test the limits of my server as well as the limits of the registrar before it blocks ur Ip

this script has successfully tested about 10976 domains.. :)

to test further i have placed about 45000 domains.. when the results come i will definately inform

update:
while checking the 15000 domains of the second lot i recieved this error
Fatal error: Maximum execution time of 30 seconds exceeded in /home/champroc/public_html/dc/index.php on line 43

i think that if u own the server then u can increase this time which will make this script invincible
 
Last edited:
0
•••
Fatal error: Maximum execution time of 30 seconds exceeded in /home/champroc/public_html/dc/index.php on line 43

Fixed!

CODE UPDATED!
- Added "save results as text file" feature - requested.
- Added .tv domain support - requested

Go back to page one or download here: http://mattjewell.com/dnlookup/download.zip

Live demo updated:
http://mattjewell.com/dnlookup/

My apolagies for the lazy coding, i just can't spend a large amount of time on this right now.

edit: having problems with demo for some reason, will fix asap.

Script bug found and fixed! :)
 
Last edited:
0
•••
u rock !!!

will add some more reps to you when VB permits..

whenever u get time please add the email and cronjobs to be implemented!!
 
0
•••
champ_rock said:
u rock !!!

will add some more reps to you when VB permits..

whenever u get time please add the email and cronjobs to be implemented!!

Thanks ;)

I'm going to leave that for someone who wants it to do themselves, it's a bit out of this scripts job if you get me. Maybe my next script will do that ;)

edit: Another bug found/fixed.
 
Last edited:
0
•••
How about have checkbox for each extension?
 
0
•••
tansks said:
How about have checkbox for each extension?
Tansks, this has already been asked. You guys are killing him. He customs out a script, shares it, changes it to suit some requests, mentions he is tired, also that he is missing work, takes the time and fixes some bugs, clearly states he is leaving further modding to the next guy, and still.....

Anyways Matthew, thanks for a job well done!

With your permission we will be adding this into the DNOA Members Toolbox interface, with all props to you of course.

Peace,
Cyberian
 
0
•••
well mathew, you will be happy to know that i just checked about 45000 domains successfully..

also, this script uses very very less bandwidth.. it had used about 7 mb for searching about 60000domains... :) :)
 
0
•••
~ Cyberian ~ said:
Tansks, this has already been asked. You guys are killing him. He customs out a script, shares it, changes it to suit some requests, mentions he is tired, also that he is missing work, takes the time and fixes some bugs, clearly states he is leaving further modding to the next guy, and still.....

Anyways Matthew, thanks for a job well done!

With your permission we will be adding this into the DNOA Members Toolbox interface, with all props to you of course.

Peace,
Cyberian

Oops, sorry (to Matthew).
 
0
•••
Don't worry about it tansks :)

Tansks, this has already been asked. You guys are killing him. He customs out a script, shares it, changes it to suit some requests, mentions he is tired, also that he is missing work, takes the time and fixes some bugs, clearly states he is leaving further modding to the next guy, and still.....

Anyways Matthew, thanks for a job well done!

With your permission we will be adding this into the DNOA Members Toolbox interface, with all props to you of course.

No problems :) You may use it however you wish, no credits required :) It's all free.
 
0
•••
0
•••
Thanks ashokuh.


Code updated!

- Added .in support
- Fixed .mobi support (i removed it by accident)
- Fixed/Replaced URL grabber:
PHP:
// From:
str_replace(array('http://', 'www.'), null, $domain); / (would break domains such as freewww.com)

// To:
preg_match('@^(http://www\.|http://|www\.)?([^/]+)@i', $domain, $matches);
 
0
•••
ok

i am a complete newbie to php.. i have not even read the first page of php tutorial anywhere.. so please dont think that this script that i am uploading is perfect

i have added email support (copied the emailing script from the net) :) which works only when u have enabled the option to save as a text file

if anyone has some spare time then please refine this script as follows: (mathews i am not asking uto do it as u r busy)
current bug that i know exist but cannot rectify because of my limited knowledge:

if the "availability" file does not exist but the "taken file" exists then it gives a error.


also, i would want to ad a text box on the script page where the user can specify which email id does he want the email to be sent to.. {this one should not be difficult}

thanks for all ur help
 
0
•••
Code has been updated once more.

Changes are only to code organization. (script shortened)
 
0
•••
Suggestion: Transform the entered urls to lowercase ;)

edit: you have already done that, sorry not paying attention lol
 
0
•••
. Adam . said:
Suggestion: Transform the entered urls to lowercase ;)

edit: you have already done that, sorry not paying attention lol

I do not transform the urls, i transform the extension when being used as an array key however the urls remain untouched as there is no reason to change them.
 
1
•••
I don't want to bother, but... can you add the .es and .com.es ext?
 
0
•••
Excellent script!

Thanks a lot for sharing.

Repd!
 
0
•••
Cheers YesBrilliant, mattjewell.com is being a little slow right now so it might be acting a bit crap ;)

mtorregiani, i read your post and then forgot about it sorry. I can't seem to find a whois server for .com.es or .es, so i can't add support sorry :(
 
0
•••
0
•••
Can't work with that sorry :P

There is no whois server listed on any site i can find and whois services like whois.sc d not even give a full whois report so i can only assume it doesn't have one :td:
 
0
•••
this is just what i was looking for,i can't thank you enough!

btw...can you make a bulk GOOGLE PageRank checker?
 
0
•••
Don't mention it signor.

That's actually an interesting idea you havce, i may look into doing that some time in the future, depends when i get some time.

Matt
 
0
•••
Matthew. said:
Don't mention it signor.

That's actually an interesting idea you havce, i may look into doing that some time in the future, depends when i get some time.

Matt


yes off course :] :] :]
 
0
•••
Id it possible to add the .mobi extension?
 
0
•••
.mobi support is already a feature in the last revision mtorregiani :)
 
0
•••
  • The sidebar remains visible by scrolling at a speed relative to the page’s height.
Back