[advanced search]
NamePros Domain Auction
Live Event This Thursday at 6PM EDT - Prebidding open now
32 members in the live chat room. Join Chat!
Register Rules & FAQ NP$ Store Active Threads Mark Forums Read
Go Back   NamePros.Com > Design and Development > Programming > CODE
User Name
Password

Old 01-14-2008, 01:29 AM   · #1
Mikor
Resident Linux Geek
 
Mikor's Avatar
 
Name: Michael Walker
Location: East Yorkshire, England
Trader Rating: (7)
Join Date: Aug 2005
Posts: 2,265
NP$: 283.30 (Donate)
Mikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to all
A whois class (sort of)

This isn't actually a whois class, it's a class that selects a whois server for a domain. If multiple whois servers are available, it chooses a random one.
The script uses this XML file to get the servers (human-readable version here).
As per their request, by default the class keeps a local cache of the XML file and updates once a day. To enable caching, make the directory the cache will be in writable. To disable caching change
PHP Code:
var $use_cache = true;

To
PHP Code:
var $use_cache = false;


Here is the class
PHP Code:
class whoisserver{

    var
$url = "http://serverlist.domaininformation.de/";
    var
$cache = "whois.xml";
    var
$use_cache = true;

    function
parsexml($file){
        
$parser = xml_parser_create('');
        
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
        
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
        
xml_parse_into_struct($parser, file_get_contents($file), $tags);
        
xml_parser_free($parser);
    
        
$elements = array();
        
$stack = array();
        foreach(
$tags as $tag){
            
$index = count($elements);
            if(
$tag['type'] == "complete" || $tag['type'] == "open"){
                
$elements[$index] = array();
                
$elements[$index]['name'] = $tag['tag'];
                
$elements[$index]['attributes'] = empty($tag['attributes']) ? "" : $tag['attributes'];
                
$elements[$index]['content']    = empty($tag['value']) ? "" : $tag['value'];
            
                if(
$tag['type'] == "open"){    # push
                    
$elements[$index]['children'] = array();
                    
$stack[count($stack)] = &$elements;
                    
$elements = &$elements[$index]['children'];
                }
            }
        
            if(
$tag['type'] == "close"){    # pop
                
$elements = &$stack[count($stack) - 1];
                unset(
$stack[count($stack) - 1]);
            }
        }
        return
$elements[0];
    }

    function
cachecheck(){
        if(!
file_exists($this->cache) || filemtime($this->cache) < time() - 86400 && $this->use_cache == true){
            
$xml = file_get_contents($this->url);
            
            
unlink($this->cache);
            
            
$fp = fopen($this->cache, "w+");
            
fwrite($fp, $xml);
            
fclose($fp);
            
            return
true;
        }else{
            return
false;
        }
    }

    function
getxml(){
        
$file = ($this->use_cache == true) ? $this->cache : $this->url;
        
$xml = $this->parsexml($file);
        
        return
$xml;
    }
    
    function
getservers(){
        
$xml = $this->getxml();
        
$servers = array();

        foreach(
$xml['children'] as $child){
            if(!empty(
$child['children'])){
                foreach(
$child['children'] as $baby){
                    if(
$baby['name'] == 'domain'){
                        if(empty(
$servers["{$baby['attributes']['name']}"])){
                            
$servers["{$baby['attributes']['name']}"] = array("{$child['attributes']['host']}");
                        }else{
                            
$servers["{$baby['attributes']['name']}"][] = "{$child['attributes']['host']}";
                        }
                    }
                }
            }
        }
        
        return
$servers;
    }
    
    function
pickserver($tld){
        
$servers = $this->getservers();
        
        if(!empty(
$servers["{$tld}"])){
            
$server = $servers["{$tld}"];
            if(
count($server) != 1){
                return
$server[array_rand($server)];
            }else{
                return
$server[0];
            }
        }else{
            return
false;
        }
    }
    
    function
go($domain){
        
$this->cachecheck();
        
        
$domain = str_replace('www.', '', $domain);
        
$domain = strrev($domain);
        
$domain = explode('.', $domain);
        
        if(
count($domain) == 3){
            
$tld = strrev($domain[1]) . '.' . strrev($domain[0]);
        }else{
            
$tld = strrev($domain[0]);
        }
        
        
$server = $this->pickserver($tld);
        return
$server;
    }
}


I wrote the whole class except the parsexml() function which I found on php.net. Do what you want with the code.

Here are two examples:
PHP Code:
$ws = new whoisserver;
echo
$ws->go("http://www.yarrt.com")."\n"; // should return "whois.crsnic.net"
echo $ws->go("http://hello.uyp")."\n"; // should return false


Please register or log-in into NamePros to hide ads
__________________
Michael Walker @ http://me.yarrt.com

NEW COMPUTING BLOG: http://blog.yarrt.com
Mikor is offline   Reply With Quote
Old 01-14-2008, 08:19 PM   · #2
Borghunter
Resistance is Futile
 
Borghunter's Avatar
 
Name: Mitchell
Location: Calgary, Canada
Trader Rating: (24)
Join Date: Apr 2006
Posts: 1,049
NP$: 222.05 (Donate)
Borghunter is a name known to allBorghunter is a name known to allBorghunter is a name known to allBorghunter is a name known to allBorghunter is a name known to allBorghunter is a name known to all
Wildlife
Very nice class Mikor, could come in very handy. I may have to use that in the Web 2.0 Whois checker i'm working on. (Don't worry, i'll credit you. )
Can't rep you, apparently i'm too fond of you
Borghunter is offline  
  Reply With Quote
Old 01-15-2008, 03:16 AM   · #3
peter@flexiwebhost
NamePros Staff
 
peter@flexiwebhost's Avatar
 
Name: Peter McDonald
Location: Dundee, Scotland
Trader Rating: (37)
Join Date: Nov 2003
Posts: 3,754
NP$: 74.70 (Donate)
peter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud of
Child Abuse Save The Children Save The Children
Providing http://serverlist.domaininformation.de/ is kept up to date that could come in very handy.

1 addition that might be useful however is to store the file locally and only retrieve it say once a day instead of every time the class is used.
peter@flexiwebhost is offline   Reply With Quote
Old 01-15-2008, 04:06 AM   · #4
Mikor
Resident Linux Geek
 
Mikor's Avatar
 
Name: Michael Walker
Location: East Yorkshire, England
Trader Rating: (7)
Join Date: Aug 2005
Posts: 2,265
NP$: 283.30 (Donate)
Mikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to all
Originally Posted by peter@flexiwebhost
1 addition that might be useful however is to store the file locally and only retrieve it say once a day instead of every time the class is used.


It does, have another look at the code.
__________________
Michael Walker @ http://me.yarrt.com

NEW COMPUTING BLOG: http://blog.yarrt.com
Mikor is offline   Reply With Quote
Old 01-15-2008, 04:15 AM   · #5
peter@flexiwebhost
NamePros Staff
 
peter@flexiwebhost's Avatar
 
Name: Peter McDonald
Location: Dundee, Scotland
Trader Rating: (37)
Join Date: Nov 2003
Posts: 3,754
NP$: 74.70 (Donate)
peter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud ofpeter@flexiwebhost has much to be proud of
Child Abuse Save The Children Save The Children
Next time I demand you forget that so I don't look silly when I make the suggestion

Ooh and read your pm. Sorry I forgot I will read the post in a minute and get back to you .
peter@flexiwebhost is offline   Reply With Quote
Old 01-15-2008, 04:46 AM   · #6
Mikor
Resident Linux Geek
 
Mikor's Avatar
 
Name: Michael Walker
Location: East Yorkshire, England
Trader Rating: (7)
Join Date: Aug 2005
Posts: 2,265
NP$: 283.30 (Donate)
Mikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to allMikor is a name known to all
Originally Posted by peter@flexiwebhost
Next time I demand you forget that so I don't look silly when I make the suggestion


Forget what? My mind is suddenly blank

Originally Posted by peter@flexiwebhost
Ooh and read your pm. Sorry I forgot I will read the post in a minute and get back to you .


Good, and if you're likely to forget again, you may find it easier to remember if you open it in another tab - it's very difficult to forget things that are staring you in the face.
__________________
Michael Walker @ http://me.yarrt.com

NEW COMPUTING BLOG: http://blog.yarrt.com
Mikor is offline   Reply With Quote
Reply

NamePros is a revenue sharing forum.

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump


Site Sponsors
Join now! Get Me Visits Venta de dominios Compra tu dominio
Advertise your business at NamePros
All times are GMT -7. The time now is 11:55 AM.


Powered by: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0