Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха информатор 3.1
Еще более удобное оповещение о флуде!

Краснодарское время: 25 Май, 2012, 04:26:09

Страниц: [1] 2 3 4
Печать
Автор Тема: whois класс  (Прочитано 1304 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SpartakuS    ↓ 
06 Октябрь, 2010, 09:22:51
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 32
Сообщений: 2444
Сила слова: 1.31

PHP
<?php
 
class whois {
    
    protected $tldName;
    protected $domainName;
    protected $aInfo = array();
    protected $sInfo = '';
    
    private $conf = array();
 

    public function __construct ($domain, $conf) {
        $this->conf = $conf;
        $domain = $this->validate($domain);
        $this->parseDomain($domain);
        $this->getAnswer();
    }
    
    public function getText ($html = false) {
        return $html ? nl2bt($this->sInfo) : $this->sInfo;
    }
    
    public function getInfo ($element = false) {
        return $element ? $this->aInfo[strtolower($element)] : $this->aInfo;
    }
    
    public function isAvailable() {
        return (stripos($this->sInfo, $this->conf[$this->tldName]['server'][1]) === false) ? false : true;
    }
    
    public function getRegDate() {
        return $this->getPart('created');
    }
    
    public function getExpireDate() {
        return $this->getPart('expire');
    }
    
    public function getNS() {
        return $this->getPart('ns');
    }
 
    private function getPart($type) {
        $info = $this->aInfo[strtolower($this->conf[$this->tldName][$type])];
        if (!$info && $this->conf[$this->tldName]['regexp'][$type]) {
            preg_match($this->conf[$this->tldName]['regexp'][$type], $this->sInfo, $info);
            $info = $info[1];
        }
        return $info;
    }
    
    private function parseDomain($domain) {
        $this->tldName = explode(".", $domain);
        $this->domainName = array_shift($this->tldName);
        $this->tldName = implode('.', $this->tldName);
    }
    
    protected function getAnswer() {
        $server = $this->conf[$this->tldName]['server'][0];
        $domain = $this->domainName . '.' . $this->tldName;
        if ($this->conf[$this->tldName]['server'][2]) {
            $this->getDoubleAnswer($domain, $server);
        } else {
            $this->getSimpleAnswer($domain, $server);
        }
    }
    
    protected function getSimpleAnswer($domain, $server) {
        $fp = @fsockopen($server, 43);
        if (!$fp) throw new Exception ('Whois server not available.');
        fputs($fp, "$domain\r\n");
        $this->sInfo = '';
        $answer = array();
        while (!feof($fp)) {
            $answer[] = trim(fgets($fp, 128));
        }
        for ($i = 0;$i<count($answer);$i++) {
            $sInfo = $answer[$i];
            $this->sInfo .= "$sInfo\r\n";
            $aInfo = array_map('trim', explode(':', $sInfo, 2));
            if (count($aInfo) == 2  && preg_match('/^[-a-z ]+$/i', $aInfo[0])) {
                if (!empty($aInfo[1])) {
                    if (!isset($this->aInfo[strtolower($aInfo[0])])) {
                        $this->aInfo[strtolower($aInfo[0])] = $aInfo[1];
                    } else {
                        if(is_array($this->aInfo[strtolower($aInfo[0])])) {
                            $this->aInfo[strtolower($aInfo[0])][] = $aInfo[1];
                        } else {
                            $this->aInfo[strtolower($aInfo[0])] = array($this->aInfo[strtolower($aInfo[0])], $aInfo[1]);
                        }
                    }
                } else {
                    
                    do {
                        $i++;
                        $string = $answer[$i];
                        if(empty($string) || strpos($string, ':') !== false) break;
                        $this->sInfo .= "$string\r\n";
                        $this->aInfo[strtolower($aInfo[0])][] = $string;
                    } while (!empty($string) && strpos($string, ':') === false);
                    $i--;
                }
            }
        }
    }
 
    protected function getDoubleAnswer($domain, $server) {
        $fp = @fsockopen($server, 43);
        if (!$fp) throw new Exception ('Whois server not available.');
        fputs($fp, "$domain\r\n");
        $this->sInfo = '';
        while (!feof($fp)) {
            $sInfo = trim(fgets($fp, 128));
            $this->sInfo .= "$sInfo\r\n";
            $aInfo = array_map('trim', explode(':', $sInfo, 2));
            if (strtolower($aInfo[0]) == 'whois server') {
                $doubleServer = $aInfo[1];
            }
        }
        $doubleServer = $doubleServer ? $doubleServer : 'whois.networksolutions.com';
        $this->getSimpleAnswer($domain, $doubleServer);  
    }
 
    protected function validate ($domain) {
        preg_match ('#^(?:(?:http|https|ftp|svn)?://)?([a-z0-9\.\-]+)(?:/(?:.*))?$#i', $domain, $domain);
        if (!$domain) throw new Exception('Not Valid Domain');
        $domain = $domain[1];  
        if (in_array('-', array($domain{1}, substr($domain, -1))) && strpos($domain, '--') !== false) throw new Exception('Not Valid Domain');
        return $domain;
    }
 
}
PHP
//Настройки Хуиза
$whoisConf = array (
        'ru' => array(
            'server' => array('whois.ripn.ru', 'No entries found'),
            'created' => 'created',
            'expire' => 'paid-till',
            'ns' => 'nserver'
        ),
        'su' => array(
            'server' => array('whois.ripn.ru', 'No entries found'),
            'created' => 'created',
            'expire' => 'paid-till',
            'ns' => 'nserver'
        ),
        'com' => array(
            'server' => array('whois.crsnic.net', 'No match', true),
            'created' => 'Creation date',
            'expire' => 'Expiration Date',
            'ns' => 'Domain servers in listed order',
            'regexp' => array(
                'created' => '/Record created on ([0-9]{2}-[a-z]{3}-[0-9]{4})/i',
                'expire' => '/Record expires on ([0-9]{2}-[a-z]{3}-[0-9]{4})/i',
            )
        ),
        'net' => array(
            'server' => array('whois.crsnic.net', 'No match', true),
            'created' => 'Creation Date',
            'expire' => 'Expiration Date',
            'ns' => 'Domain servers in listed order',
            'regexp' => array(
                'created' => '/Record created on ([0-9]{2}-[a-z]{3}-[0-9]{4})/i',
                'expire' => '/Record expires on ([0-9]{2}-[a-z]{3}-[0-9]{4})/i',
            )
        ),
        'org' => array(
            'server' => array('whois.pir.org', 'NOT FOUND'),
            'created' => 'Created On',
            'expire' => 'Expiration Date',
            'ns' => 'Name Server'
        ),
        'biz' => array(
            'server' => array('whois.biz', 'Not found'),
            'created' => 'Name Server:',
            'expire' => 'Expiration Date',
            'ns' => 'Name Server'
        ),
        'info' => array(
            'server' => array('whois.afilias.info', 'Not found'),
            'created' => 'Created On',
            'expire' => 'Expiration Date',
            'ns' => 'Name Server'
        ),
        'mobi' => array(
            'server' => array('whois.dotmobiregistry.net', 'NOT FOUND'),
            'created' => 'Created On',
            'expire' => 'Expiration Date',
            'ns' => 'Name Server'
        ),
        'name' => array(
            'server' => array('whois.nic.name', 'No match'),
            'created' => 'Created On',
            'expire' => 'Expires On',
            'ns' => 'Name Server'
        ),
        'tv' => array(
            'server' => array('whois.nic.tv', 'No match'),
            'created' => 'Creation date',
            'expire' => 'Expiration date',
            'ns' => 'Name Server'
        ),
        'cn' => array(
            'server' => array('whois.cnnic.net.cn', 'No entries found'),
            'created' => 'Registration Date',
            'expire' => 'Expiration Date',
            'ns' => 'Name Server'
        ),
        'ki' => array(
            'server' => array('whois.nic.ki', 'NOT FOUND'),
            'created' => 'Created',
            'expire' => 'Expires',
            'ns' => 'Name Server'
        ),
        'in' => array(
            'server' => array('whois.inregistry.in', 'NOT FOUND'),
            'created' => 'Created On',
            'expire' => 'Expiration Date',
            'ns' => 'Name Server'
        ),
        'mn' => array(
            'server' => array('whois2.afilias-grs.net', 'NOT FOUND'),
            'created' => 'Created On',
            'expire' => 'Expiration Date',
            'ns' => 'Name Server'
        ),
        'cc' => array(
            'server' => array('whois.nic.cc', 'No match'),
            'created' => 'Creation Date',
            'expire' => 'Expiration Date',
            'ns' => 'Name Server'
        ),
        'ws' => array(
            'server' => array('whois.worldsite.ws', 'No match for'),
            'created' => 'Domain Created',
            'expire' => 'Domain Currently Expires',
            'ns' => 'Name Server'
        ),
        'asia' => array(
            'server' => array('whois.nic.asia', 'NOT FOUND'),
            'created' => 'Domain Create Date',
            'expire' => 'Domain Expiration Date',
            'ns' => 'Nameservers'
        ),
);
буду благоарен за кодревью =)
Записан


цска ебаное гавно.
phpdude    ↓ 
06 Октябрь, 2010, 09:34:01 , спустя 11 минут 10 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20790
Сила слова: 1.65

ценное из этого - массив, остальное не важно :D
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
SpartakuS    ↓ 
06 Октябрь, 2010, 09:43:44 , спустя 9 минут 43 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 32
Сообщений: 2444
Сила слова: 1.31

phpdude, ну да. Ради него я и делал. Но с разнообразием хуйответов конечно сложно боротся. Посторально сделать максимально гибко =)
Записан


цска ебаное гавно.
NRG    ↓ 
06 Октябрь, 2010, 09:47:42 , спустя 3 минуты 58 секунд
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

я как всегда приебусь к стилю.
ты вкурсе что именование протектед/приват методов/свойств начинается с андерскора ?
и где пхпдоки блеать ??
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
phpdude    ↓ 
06 Октябрь, 2010, 09:49:17 , спустя 1 минуту 35 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 344
Сообщений: 20790
Сила слова: 1.65

NRG, суровый доебчивый пацик!
Спустя 24 секунды добавил
Text
if (!isset($this->aInfo[strtolower($aInfo[0])])) {
                        $this->aInfo[strtolower($aInfo[0])] = $aInfo[1];
                    } else {
                        if(is_array($this->aInfo[strtolower($aInfo[0])])) {
                            $this->aInfo[strtolower($aInfo[0])][] = $aInfo[1];
                        } else {
                            $this->aInfo[strtolower($aInfo[0])] = array($this->aInfo[strtolower($aInfo[0])], $aInfo[1]);
                        }
                    }
блеять ...
Спустя 29 секунд добавил
рефакторинг бы тут не помешал, хотя бы так ..
 
$aInfo0 = strtolower($aInfo[0]);
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Абырвалг    ↓ 
06 Октябрь, 2010, 09:50:01 , спустя 44 секунды
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

ща, еще бутылочка пивка и будет тебе ревью)
Спустя 17 секунд добавил
вот так новость: 4 новых ответа
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
NRG    ↓ 
06 Октябрь, 2010, 09:51:03 , спустя 1 минуту 2 секунды
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

PHP
public function isAvailable() {
        return (stripos($this->sInfo, $this->conf[$this->tldName]['server'][1]) === false) ? false : true;
    }

PHP
public function isAvailable() {
        return !(stripos($this->sInfo, $this->conf[$this->tldName]['server'][1]) === false);
    }
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
Абырвалг    ↓ 
06 Октябрь, 2010, 09:53:01 , спустя 1 минуту 58 секунд
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

ты вкурсе что именование протектед/приват методов/свойств начинается с андерскора ?
чушь говоришь. Это было нужно во времена php4, когда не было реальных PPP. Теперь же - только пальцы ломать, нажимая шифт. Кроме того, если работаешь с чужим кодом - можно проебать какой-то метод, забыв посмотреть - а есть ли такой, но начинающийся с "_"  
Спустя 44 секунды добавил
я не говорю о второй доктрине, но даже zf2 будет без этой хуйни с _
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
NRG    ↓ 
06 Октябрь, 2010, 09:54:39 , спустя 1 минуту 38 секунд
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

Абырвалг, когда будет, тогда и поговорим.
а чтоб впустую не балабольствовать достаточно просто пойти на сайт зенда и посмотреть кодинг стандарты
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
Абырвалг    ↓ 
06 Октябрь, 2010, 09:55:00 , спустя 21 секунду
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

NRG,
PHP
return stripos($this->sInfo, $this->conf[$this->tldName]['server'][1]) !== false;
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
NRG    ↓ 
06 Октябрь, 2010, 09:57:04 , спустя 2 минуты 4 секунды
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

да, можно и так
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
Абырвалг    ↓ 
06 Октябрь, 2010, 10:08:08 , спустя 11 минут 4 секунды
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

Абырвалг, когда будет, тогда и поговорим.
http://stackoverflow.com/questions/3748053/zend-framework-2-underscore-private
похоже я что-то напутал.
 
Но вот доктрина вторая точно будет без этих префксов http://www.doctrine-project.org/jira/browse/DDC-536
Спустя 1 минуту 38 секунд добавил
еще вариант
PHP
return is_int($this->sInfo, $this->conf[$this->tldName]['server'][1]);
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
SpartakuS    ↓ 
06 Октябрь, 2010, 10:18:17 , спустя 10 минут 9 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 32
Сообщений: 2444
Сила слова: 1.31

ты вкурсе что именование протектед/приват методов/свойств начинается с андерскора ?
вкурсе. Просто как то неудобно писать _ перед методами и переменными. Вот и игнорирую это правило(.
и где пхпдоки блеать ??
В таких маленьких классах  пишу их обычно после того, как привожу класс в финальное состояне. А тут еще типа бетта версия чтоли.
блеять ...
да пожалуй.
NRG, угу. Сеньк.
Записан


цска ебаное гавно.
OFF    ↓ 
06 Октябрь, 2010, 10:57:12 , спустя 38 минут 55 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 11
Сообщений: 299
Сила слова: 3.68

SpartakuS, Спасибо. Я возьму это.
Записан

Я клёвый
Troy    ↓ 
07 Октябрь, 2010, 03:21:18 , спустя 16 часов 24 минуты 6 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 45
Сообщений: 2393
Сила слова: 1.88

Пишу всегда приват методы с _ , читабельно
Записан

Страниц: [1] 2 3 4
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd, artoodetoo