Пятница , 29 Март 2024
ДомойПубликацииphp: решение проблемы удалённого доступа к хосту по его имени

php: решение проблемы удалённого доступа к хосту по его имени

vkontakte api

третьего дня совершенно нежданно возникла проблема: на одном из сайтов напрочь перестала работать возможность получения информации с удалённого хоста. соединение производилось через функцию fsockopen(), и проблема вроде бы была в некорректном получении ответа. дальнейшее разбирательство привело к тому, что причина крылась вовсе даже и не в запросах/ответах: указанная функция напрочь отказывалась соединяться с удалённым хостом. но это была лишь часть проблемы. на остальных сайтах также поотваливались все функции, работающие с удалёнными хостами. постановка вместо символьного имени прямого ip адреса проблему решало. но, по определённым обстоятельствам, для некоторых случаев это совершенно не подходило.

проблема возникала при использовании функций fopen, fsockopen, file, file_get_contents, copy и прочих, которые могут автоматически соединяться с удалённым хостом. если кто-то не знает, поясню: в php.ini есть настройка, отвечающая за так называемый «fopen wrappers» — директива allow_url_fopen, которая, будучи уставлена в истину, позволяет функциям php соединяться с удалённым хостом, если строка пути файла начинается с http://.

следующим шагом стала попытка присоединиться к хосту через консоль. и тут поджидала главная засада: проблема крылась ни в php или апаче, всё было гораздо глубже (или ниже). попытки выполнить запрос, вида:

ping domain.ru

успешно проваливались. но при этом запросы вида:

ping 1.2.3.4

прекрасно отрабатывали. из чего, по крайней мере, можно было сформировать проблему: трабла каким-то образом связана с преобразованием символьных имён в ip.

погуглив по некоторым запросам, ничего не нашёл (тут дело может быть в том, что я не особо представлял, что именно нужно искать). на всякий случай решил написать в техподдержку своего хостинга. как всегда, ответил Владимир, за что ему огромное спасибо!

решение оказалось простым до безобразия. в системе (линукс) есть файл по адресу /etc/resolv.conf, в котором содержится данные конфигурации для dns в виде:

nameserver 102.104.108.116

указанный ip — это адрес, на который перенаправляются все запросы для преобразования символьного имени в ip. видимо, какое-то время указанный в конфиге адрес был недоступен, поэтому система и не могла запросить ip для обращения. изменение адреса на гугловский проблему целиком решило:

nameserver 8.8.8.8

адрес можно изменить, а можно добавить ещё одну строку. в этом случае, при недоступности первого ip, будет использован следующий. чуть подробнее о resolv.conf.

Рейтинг: 0

Автор публикации

2 070
не в сети 11 месяцев

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (Оценок пока нет)
Загрузка...

4 комментария

  1. Здравствуйте, рада знакомству. К сожалению не нашла на сайте Вашего имени smile Очень много полезной информации у Вас. Буду заходить — как начинающий блоггер. Ведь технические вопросы никто не отменял smile

    Рейтинг: 3

Оставить комментарий

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять