2016-06-15 2 views
-2

Я работаю с PHP-скриптом, чтобы попытаться разрешить неопределенный URL (например, набирать на facebook.com) в качестве абсолютного URL-адреса (например, https://www.facebook.com); аналогично тому, что ваш браузер делает ежедневно, используя PHP.PHP: gethostbyaddr() возвращает недопустимый url

До сих пор у меня есть следующий код:

$link = gethostbyname("facebook.com"); 

Это обеспечивает IPv4-адрес, который работает, но потом, когда я обратный поиск с помощью:

$link2 = gethostbyaddr($link); 

Я ожидал получите действительный URL-адрес, например «https://www.facebook.com», но вместо этого я получаю мусор, такой как «« edge-star-mini-shv-13-atn1.facebook.com ».

Это затем разрушает любую надежду на использование fopen или curl попробовать и прочитайте содержимое веб-страницы.

Может кто-нибудь объяснить, что здесь не так, и как я могу это решить?

EDIT: Попытка незащищенный URL, как "Google.co.uk" возвращает " 'lhr25s10-in-f3.1e100.net'", так что это не что-то делать с безопасного HTTP (HTTPS)

+0

@ C0dekid - Да. «google.co.uk» предоставляет «lhr25s10-in-f3.1e100.net», и это совсем не безопасно. – Raisus

+0

Удерживайте .. host - это домен, на котором размещен этот IP-адрес, используйте инструмент GeoIP и посмотрите сами. Hostbyaddr не является ссылкой на сайт. – Jer

+0

в соответствии с PHP.net (http://php.net/manual/en/function.gethostbyaddr.php) – Raisus

ответ

0

gethostbyaddr получает имя хоста, а не URL-адрес для IP-адреса.

Несколько имен хостов могут быть назначены на один IP-адрес.

gethostbyaddr получит значение по умолчанию.

HTTP-сервер, прослушивающий этот IP-адрес, обрабатывает запросы ко всем именам хостов.

HTTP-запрос включает в себя заголовок запроса с именем Host, который указывает, какое имя хоста вы запрашиваете.

HTTP-сервер может обратить внимание на этот заголовок и обслуживать различный контент для разных имен хостов. Это позволяет размещать несколько веб-сайтов на одном IP-адресе. Это очень полезно, так как адреса IPv4 ограничены, и существует много многих сайтов.

Вы получаете имя хоста по умолчанию для компьютера, на котором размещается facebook.com, но на веб-сервере не размещен веб-сайт, который вы хотите по этому имени хоста.

+0

Ah. Понимаю. Что вы рекомендуете использовать для получения веб-сайта? Если вы можете отредактировать свой ответ, включив его, я соглашусь с ним. – Raisus

+0

Чтобы узнать о URL-адресе веб-сайта, с которым вы хотите иметь дело (вместо IP-адреса компьютера, на котором он находится), и просто используйте это. т. е. пропустить абсолютно все, что вы делаете в вопросе. – Quentin

+0

НО ... это не так, как это делает ваш браузер. Вам не нужно знать точный URL-адрес, чтобы ваш браузер интерпретировал ваши намерения. – Raisus