Аргерих Л. О языке РНР. Часть 3. Страница 70


В самом классе отсутствует какое-либо постоянное кэширование ответов службы DNS, из чего следует, что сценарии, выполняющиеся в CGI-версии РНР, не выиграют от механизма кэширования, поскольку каждый раз класс создается заново. Кроме того, поскольку наша задача носит скорее иллюст­ративный характер, мы не будем реализовывать никакой семантики устаре­вания кэша. В реальном клиенте DNS должен присутствовать разумный ме­ханизм поддержки сроков действия кэша:

<?php

class Resolver {

Следующие переменные представляют различные ассоциативные массивы, используемые для кэширования ответов на запросы:

var $ho,stName; var SdomainName; var SipAddress;

var

var SservPort; var SipDotted; var SprotoNumber;

var $protoName; var SipLong;

Конструктор просто инициализирует массивы:

function ResolverO {

j resetCacheQ;

Этот метод получает данные о почтовом ретрансляторе для заданного домена:

function getMx($domain) {

Если значение кэшировано, возвращаем его, не вызывая функцию getmxrr():

if (!$domain) {

loggerг("Domain name is required to retrieve MX records"); return -1;

} elseif (($ret = $mailXchanger[$domain])) {

return $ret;

Если нет значения в кэше, вызываем функцию getmxrr(), чтобы получить от­вет и поместить результат в кэш:

} elseif (getmxrr($domain, ImailXchanger) == false) { log_err("MX records could not be found found for " , SdomainName);

return -1; } else {

$domainName[$domain] = ImailXchanger; return ImailXchanger;

I

i

Этот метод возвращает IP-адрес по заданному имени хоста:

function getlpAddress(Shost) {

Как и в методе мы пытаемся найти предыдущий ответ на этот за­

прос, а если это не удается, выполняем вызов функции gethostbynamel() и кэ- шируем результат:

if (!$host) {

log_err("Host name is required to find IP addresses");

return -1;

} elseif ((Sret = $ipAddress[$host])) { return $ret;

} elseif (($ret =gethostbynamel(Shost)) == false) {

log_err("IP address could not be found found for " . $host); return -1; } else {

SipAddress[$host] = $ret; $hostName[$ret] = $.host; return $ret;

}

)

Этот метод возвращает имя хоста по данному IP-адресу:

function getHostName($ipAddr)

{

Он проверяет формат IP-адреса:

if ($ipAddr != О &&

!ereg("[0-254]\.[0-254]\.[0-254]\,[0-254]", SipAddr)) {

Остальные методы применяют ту же стратегию кэширования ответов:

log_err( "Incorrect IP address format"); return -1;

elseif (($ret = $hostName[$ipAddr])) { return $ret;

} elseif (($ret = gethostbyaddr($ipAddr)) == false) {




Сегодня в поисках работы находится много людей. Но лучше всего и быстрее всего найти работу в Буинске через интернет сайт "Из рук в руки". Здесь вы точно найдете желаемую работу и при этом высокооплачиваемую.