в личку, плиз.
В личку, плиз.
Немного подправил whois скрипт. Предыдущий выдавал, что домен занят, если whois сервер отвечал, что превышен лимит запросов.
Вот:
$WHOIS_SERVERS = array('ua' => array('addr' => 'whois.com.ua', 'free_response' => 'No entries found for domain', 'occupy_response' => 'domain:'),'ru' => array('addr' => 'whois.ripn.net', 'free_response' => 'No entries found for the selected source', 'occupy_response' => 'Last updated on'),'com' => array('addr' => 'whois.internic.net', 'free_response' => 'No match for', 'occupy_response' => 'Last update of whois database'),'net' => array('addr' => 'whois.internic.net', 'free_response' => 'No match for', 'occupy_response' => 'Last update of whois database'),'org' => array('addr' => 'whois.publicinterestregistry.net', 'free_response' => 'NOT FOUND', 'occupy_response' => 'Last Updated On'),'info' => array('addr' => 'info.whois-servers.net', 'free_response' => 'NOT FOUND', 'occupy_response' => 'Domain Name:'),'biz' => array('addr' => 'biz.whois-servers.net', 'free_response' => 'Not found', 'occupy_response' => 'Whois database was last updated on'),'' => array('addr' => 'whois.internic.net', 'free_response' => 'No match for', 'occupy_response' => 'Last update of whois database'));function check_domain($domain_name, &$whois_servers){ $zone = explode('.', $domain_name); $zone = $zone[count($zone) - 1]; if (!array_key_exists($zone, $whois_servers) && !array_key_exists('', $whois_servers)) return 'No whois server'; else if (array_key_exists($zone, $whois_servers)) $whois = $whois_servers[$zone]; else $whois = $whois_servers['']; $sock = fsockopen ($whois['addr'], 43, $errno, $errstr); if (!$sock) { return false; } else { fputs ($sock, $domain_name."\n"); while (!feof($sock)) { $response = fgets($sock, 128); if (strstr($response, $whois['free_response'])) { fclose($sock); return 'free'; } else if (strstr($response, $whois['occupy_response'])) { fclose($sock); return 'occupy'; } } } fclose($sock); return 'no_response';}
Предложите другой.
Можно к этому прокси прикрутить. Другого способа, думаю, нет.
В личку, пожалуйста, все сайты.
Нашёл глюк. Надо исправить адрес whois сервиса whois.ripe.net на whois.ripn.net. Не знаю с чем это связано, т.к. раньше работало именно через whois.ripe.net. Ну да ладно.
Вот новая версия скрипта.
$WHOIS_SERVERS = array( 'ua' => array('addr' => 'whois.com.ua', 'text' => 'No entries found for domain'), 'ru' => array('addr' => 'whois.ripn.net', 'text' => 'No entries found for the selected source'), '' => array('addr' => 'whois.internic.net', 'text' => 'No match for') ); // function check_domain($domain_name, &$whois_servers) { $zone = explode('.', $domain_name); $zone = $zone[count($zone) - 1]; if (!array_key_exists($zone, $whois_servers) && !array_key_exists('', $whois_servers)) return 'No whois server'; else if (array_key_exists($zone, $whois_servers)) $whois = $whois_servers[$zone]; else $whois = $whois_servers['']; $sock = fsockopen ($whois['addr'], 43, $errno, $errstr); if (!$sock) { return false; } else { fputs ($sock, $domain_name."\n"); while (!feof($sock)) { if (strstr(fgets($sock, 128), $whois['text'])) { fclose($sock); return 'free'; } } } fclose($sock); return 'occupy'; }
В переменной $WHOIS_SERVERS содержится массив с адресами whois серверов (для разных зон они часто бывают разными). Формат такой:
'zone' => array('addr' => 'whois.ripn.net', 'text' => 'No entries found for domain'),
Вместо zone здесь указывается зона (например, "ru"). Вместо whois.ripn.net (ключ массива 'addr') - адрес, соответствующий данной зоне, а в ключе 'text' указывается фраза, которая выдаётся whois сервером, если домен свободен (помимо подобной фразы whois сервер выдаёт ещё и много другой информации и эта фраза ищется среди выданной инфы).
Элемент массива с пустым ключом ('') используется по умолчанию, если для какой-то зоны не указан whois сервер.
Вызывать ф-ю надо так:
check_domain('yandex.ru', $WHOIS_SERVERS);
Если домен свободен, то ф-я вернёт 'free', если занят - 'occupy', если для зоны указанного домена не указан whois сервер и whois сервер по умолчанию (пустой ключ массива) не задан - то 'No whois server', в случае ошибка ф-я вернёт false.
Скрипт для проверки домена не работоспособен.
Походу ripe прикрыл лавочку. Завтра попробую разобраться.
2.1.6, имхо.