Евгений Крупченко

Евгений Крупченко
Рейтинг
178
Регистрация
27.09.2003
Интересы
хостинг без тормозов

ну так говорю же что сделать - запустите поочередно:

nslookup adara.ua dns.fastdns24.com
nslookup adara.ua dns2.fastdns24.org
nslookup adara.ua dns3.fastdns24.eu
nslookup adara.ua dns4.fastdns24.link

во всех 4х случаях должен быть получен ответ ip 5.45.122.147

это просто для проверки теории, что какой-то из этих 4х ns'ов не ответит именно там где не заходит.

проверьте у кого не заходит:

nslookup adara.ua dns.fastdns24.com
nslookup adara.ua dns2.fastdns24.org
nslookup adara.ua dns3.fastdns24.eu
nslookup adara.ua dns4.fastdns24.link

верней не так, домен adara.ua висит лишь на двух:

nserver: dns2.fastdns24.org
nserver: dns.fastdns24.com

https://dig.ua/search/adara.ua

а вот com.ua на 4х:

https://dig.ua/search/adara.com.ua

nserver: dns2.fastdns24.org
nserver: dns3.fastdns24.eu
nserver: dns4.fastdns24.link
nserver: dns.fastdns24.com

но врядли проблема в этом.

скорей всеж какой-то из ns'ов не отвечает на запросы именно с киевстаровских ip

самое простое что можно попробовать - повесить домен на другие какие-то ns. да хоть на cloudflare.

и позже еще раз посмотреть будет ли проблема.

загадка... перепробовал из разных мест, все вроде работает.

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

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

к примеру с тех адресов что-то в прошлом делали плохое, спамили, ддосили и они ушли в баню где-то например на каком-то из ns... не факт, но как предположение.

чтоб точно определить, надо симулировать/видеть проблему. 😐

нужно каким-то образом именно с адреса, который не может определить ip попробовать опросить каждый из ns'ов:

dig +short adara.ua @dns.fastdns24.com

dig +short adara.ua @dns2.fastdns24.org

dig +short adara.ua @dns3.fastdns24.eu

dig +short adara.ua @dns4.fastdns24.link

т.е. вы платите сколько, 200-300грн/мес и вместо того чтобы:

идете на какой-то форум задавать вопросы тем, кто понятия не имеет что там у вас происходит, не имея никуда доступа.

тогда вот вам еще проблема с ltrim:


предположим поддомен этот будет с буквой w как и отрезаемый www.


получили someurl, а не wsomeurl


насчет sub1 - ладно уж. мы не знаем что там у ТС на входе может быть. потому нет смысла гадать.

если только 1 уровень поддоменов, то ваш вариант сгодится.

я так и сказал:

а) если имя основного домена нам не дано, то однозначно определить что считать поддоменом невозможно. будут различные трактовки. потому принимаем, что domen.com нам известно и используем его для вычленения поддомена.

если же не известен, то конечно придется доработать.

но повторюсь:

ваше parse_url уже не сработает если искать нужно будет в строке, не начинающейся с http:// или https://

Drinktea :
sub.domen.com 

https://sub.domen.com

возьмите да запустите свой код. почему я это должен делать? :]


и также неизвестно сколько вариантов sub1.sub2.sub3.domen.com может быть на входе.

потому ваше [0] не подходит т.к. определит лишь sub1

ну и punycode:



SERVER_NAME это имя вирт. хоста, но этот вирт. хост может откликаться на разные домены/поддомены.

и у всех этих вариантов (в рамках этого вирт. хоста) SERVER_NAME будет одна и та же, а HTTP_HOST могут отличаться. например с www. и без такового.

а SERVER_ADMIN  вообще вполне может быть не задано.

короче самое надежное это HTTP_HOST - это то, что браузер шлет в заголовке Host: запрашивая сайт этот.


в любом случае задача так понял была надежно вырезать именно sub из всевозможных написаний поддомена. все остальное вторично.

мда...

всем неуд.

1) читаем внимательно что спрашивается!

надо именно извлечь sub из всех возможных вариантов, а не просто получить SERVER_NAME.

да и SERVER_NAME не совсем верно использовать.

для примера в nginx конфиге пусть будет:

server_name domen.com www. domen.com sub.domen.com;

но переменная $_SERVER['SERVER_NAME'] будет всегда равна domen.com даже если мы зайдем на www. domen.com или sub.domen.com

правильней брать имя домена из HTTP_HOST

но кто вообще говорил что скрипт будет запускаться из под каждого из этих поддоменов, а не просто списком откуда-то браться?

2) parse_url() "споткнется" если на входе будет sub.domen.com, а не http://sub.domen.com

т.е. это уже не все варианты как спрашивалось изначально.


при решении исходим из:

а) если имя основного домена нам не дано, то однозначно определить что считать поддоменом невозможно. будут различные трактовки. потому принимаем, что domen.com нам известно и используем его для вычленения поддомена.

б) не сказано сколько уровней поддоменов может быть. только sub.domen.com или sub.sub.domen.com тоже возможны. примем что такое тоже может быть (вариант с explode '.' и выбор [0] или [1] уже не катит).


решение (одно из):

пусть задано имя основного домена как-то так:

$d='domen.com';

самое простое что можно сделать - найти это имя домена в строке $s (предположительно исключаем ситуацию когда domen.com в строке вообще не будет) и дальше работаем с тем что слева от него.

$s=strstr($s,$d,true);

получаем все что слева от domen.com

дальше идея в том чтоб справа налево дойти www. или / (конец http:// или https://) или до конца строки.

разворачиваем строку задом наперед:

$s=strrev($s);

и таким же поиском strstr находим www. (верней уже .www)

но www. у нас может не быть в строке, поэтому чтоб не получить нулевой результат добавим одно www. специально:

$s="$s.www";
$s=strstr($s,'.www',true);

и в случае если www. было, то отрежется оно вместе с нашим добавленным, а если не было, то только наша вставка откусится.

аналогично делаем для слэша:

$s="$s/";
$s=strstr($s,'/',true);

возвращаем правильный порядок символов:

$s=strrev($s);

и напоследок обрезаем точку в конце (разделяющую sub и domen.com):

$s=substr($s,0,-1);

итого:


проверяем:


дело как всегда в не понимании как/что устроено и работает.

какие еще письма? каким образом они создаются?

раз упоминается апач, то подозреваю через сайт как-то... как именно? php mail() ?

если так, то эта функция просто обращается к локальному почтовику (что указано в sendmail_path)

почтовик (в debian 9 это exim) просто по своим конфигам делает отправку. и ему вообще до лампочки на каком там ip висит сайт, что за mx...

как его настроить зависит от конкретной формулировки, что вы вообще хотите получить? просто сменить один ip на другой (достаточно исправить его в local_interfaces конфига exim) или более хитро.

а может у вас скрипт более полноценно через smtp отправляет, но все равно надо смотреть в сторону конфига exim.

можно настроить привязку домена к ip, т.е. чтоб почту с адрес@домен1 слал он только с ip1, а адрес@домен2 слал - с ip2.

все возможно... главное во-первых понять что надо получить и во-вторых как все устроено, что и как правильно настроить.

Всего: 622