третьего дня совершенно нежданно возникла проблема: на одном из сайтов напрочь перестала работать возможность получения информации с удалённого хоста. соединение производилось через функцию 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.
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
Здравствуйте, рада знакомству. К сожалению не нашла на сайте Вашего имени Очень много полезной информации у Вас. Буду заходить — как начинающий блоггер. Ведь технические вопросы никто не отменял
Жанна, здравствуйте.
Зовите Andie.
Спасибо за добрые слова. Надеюсь, что-то сможет оказаться полезным.
Не надеюсь, а точно! У Андрея ворох полезняшек просто ;)
Настюша даже поскромничать не даст