В некоторых случаях функция gethostbyname
работает медленно или работает некоторое время. Некоторые говорят, что apache нуждается в перезагрузке, чтобы запустить эту функцию.Я не могу подтвердить это, но я хочу дать альтернативный метод, как найти IP по домену с помощью nslookup
function getAddrByHost($host, $timeout = 1) {
$query = `nslookup -timeout=$timeout -retry=1 $host`;
if(preg_match('/\nAddress: (.*)\n/', $query, $matches))
return trim($matches[1]);
}
echo getAddrByHost('example.com');
тест скорости, используя XHProf:
попытка 1
gethostbyname 5014593 микросекунд
getAddrByHost 29,656 microsec
попытка 2
gethostbyname 5016678 микросекунд
getAddrByHost 13887 микросекунд
попытка 3
gethostbyname 5014640 микросекунд
getAddrByHost 8297 микросекунд
Вывод: ФУНКЦИИ n gethostbyname
выполняется более 5 секунд, что очень долго. Поэтому я советую вам использовать более быструю функцию getAddrByHost
Примечание: PHP использовать этот файл /etc/resolv.conf
получить DNS-серверы:
В моем случае я использую BIND (с именем), который работает на хосте 127.0.0.1
# /etc/resolv.conf
nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 4.4.4.4
Как насчет того, чтобы показать, что у вас есть. –
Вот код: http://pastebin.com/E7s57Eak – Ray