Вы можете найти (а можете и не найти) любой из следующих элементов в массиве $_SERVER . Обратите внимание, что немногие элементы, если они есть, будут доступны (или даже будут иметь какое-нибудь значение), если PHP запущен в командной строке. ‘ PHP_SELF ‘ Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например…
апд. если решать задачу «в лоб» а не красиво, то будет что-то подобное. приведение к нижнему регистру сделано для того, что parse_url работает как есть. То-есть вываливает имя в том виде, в каком его получает на входе, независимо от регистра.
тем, что это способ разбить путь на составляющие, а не получить его
какую переменную вы туда вкорячите зависит от вашего воображения. только в той переменной должен быть валидный http адрес, иначе вернет пустую строку
апд. разумеется, если в качестве источника мы берем $_SERVER, то проще использовать ‘HTTP_HOST’ но это может быть не всегда. например, если url вводится руками пользователя в форме
зы2.
прошу прощения за кучу правок. Самочувствие не очень, сижу на колёсах.
SeVlad
silicoid #: тем, что это способ разбить путь на составляющие, а не получить его
какую переменную вы туда вкорячите зависит от вашего воображения. .. Самочувствие не очень, сижу на колёсах.
Ты эта.. не пиши на колёсах. А то такая ерунда получается…
Евгений Крупченко
мда…
всем неуд.
1) читаем внимательно что спрашивается!
надо именно извлечь sub из всех возможных вариантов, а не просто получить SERVER_NAME.
но переменная $_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);
итого:
проверяем:
SeVlad
Евгений Крупченко #: но переменная $_SERVER[‘SERVER_NAME’] будет всегда равна domen.com даже если мы зайдем на www. domen.com или sub.domen.com
Далеко не всегда.
Но согласен, с SERVER_NAME не всё однозначно.
С HTTP_HOST, впрочем, тоже могут быть нюансы. Но это всё легко выясняется.
Хинт: можно даже заюзать $_SERVER[‘SERVER_ADMIN’], если мыло админа настроена на этот домен ;).
Евгений Крупченко #: но кто вообще говорил что скрипт будет запускаться из под каждого из этих поддоменов, а не просто списком откуда-то браться?
ТС:
Drinktea #: причем нужно это на своем сайте применить, т.е. получить свой субдомен
Евгений Крупченко
SERVER_NAME это имя вирт. хоста, но этот вирт. хост может откликаться на разные домены/поддомены.
и у всех этих вариантов (в рамках этого вирт. хоста) SERVER_NAME будет одна и та же, а HTTP_HOST могут отличаться. например с www. и без такового.
а SERVER_ADMIN вообще вполне может быть не задано.
короче самое надежное это HTTP_HOST — это то, что браузер шлет в заголовке Host: запрашивая сайт этот.
в любом случае задача так понял была надежно вырезать именно sub из всевозможных написаний поддомена. все остальное вторично.
Drinktea
Здравствуйте.
Как можно в php получить сабдомен?
Например есть поддомен вида (во всех вариациях):
нужно получить только sub
Drinktea
SeVlad
Drinktea :
нужно получить только sub
https://www.php.net/manual/ru/reserved.variables.server.php:
и далее регулярками
silicoid
как дети малые. чесслово
echo explode(‘.’, parse_url ( ‘https://my.site.com’, PHP_URL_HOST ))[0]
это без www
с www добавляете проверку на www
silicoid
если решать задачу «в лоб» а не красиво, то будет что-то подобное.
приведение к нижнему регистру сделано для того, что parse_url работает как есть. То-есть вываливает имя в том виде, в каком его получает на входе, независимо от регистра.
Х.З.
как дети малые. чесслово
echo explode(‘.’, parse_url ( ‘https://my.site.com’, PHP_URL_HOST ))[0]
это без www
с www добавляете проверку на www
а чем не угодил $_SERVER[‘HTTP_HOST’] ?
silicoid
какую переменную вы туда вкорячите зависит от вашего воображения.
только в той переменной должен быть валидный http адрес, иначе вернет пустую строку
апд.
разумеется, если в качестве источника мы берем $_SERVER, то проще использовать ‘HTTP_HOST’
но это может быть не всегда. например, если url вводится руками пользователя в форме
зы2.
прошу прощения за кучу правок.
Самочувствие не очень, сижу на колёсах.
SeVlad
тем, что это способ разбить путь на составляющие, а не получить его
какую переменную вы туда вкорячите зависит от вашего воображения.
..
Самочувствие не очень, сижу на колёсах.
Ты эта.. не пиши на колёсах. А то такая ерунда получается…
Евгений Крупченко
мда…
всем неуд.
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] уже не катит).
решение (одно из):
пусть задано имя основного домена как-то так:
самое простое что можно сделать — найти это имя домена в строке $s (предположительно исключаем ситуацию когда domen.com в строке вообще не будет) и дальше работаем с тем что слева от него.
получаем все что слева от domen.com
дальше идея в том чтоб справа налево дойти www. или / (конец http:// или https://) или до конца строки.
разворачиваем строку задом наперед:
и таким же поиском strstr находим www. (верней уже .www)
но www. у нас может не быть в строке, поэтому чтоб не получить нулевой результат добавим одно www. специально:
и в случае если www. было, то отрежется оно вместе с нашим добавленным, а если не было, то только наша вставка откусится.
аналогично делаем для слэша:
возвращаем правильный порядок символов:
и напоследок обрезаем точку в конце (разделяющую sub и domen.com):
итого:
проверяем:
SeVlad
но переменная $_SERVER[‘SERVER_NAME’] будет всегда равна domen.com даже если мы зайдем на www. domen.com или sub.domen.com
Далеко не всегда.
Но согласен, с SERVER_NAME не всё однозначно.
С HTTP_HOST, впрочем, тоже могут быть нюансы. Но это всё легко выясняется.
Хинт: можно даже заюзать $_SERVER[‘SERVER_ADMIN’], если мыло админа настроена на этот домен ;).
но кто вообще говорил что скрипт будет запускаться из под каждого из этих поддоменов, а не просто списком откуда-то браться?
ТС:
причем нужно это на своем сайте применить, т.е. получить свой субдомен
Евгений Крупченко
SERVER_NAME это имя вирт. хоста, но этот вирт. хост может откликаться на разные домены/поддомены.
и у всех этих вариантов (в рамках этого вирт. хоста) SERVER_NAME будет одна и та же, а HTTP_HOST могут отличаться. например с www. и без такового.
а SERVER_ADMIN вообще вполне может быть не задано.
короче самое надежное это HTTP_HOST — это то, что браузер шлет в заголовке Host: запрашивая сайт этот.
в любом случае задача так понял была надежно вырезать именно sub из всевозможных написаний поддомена. все остальное вторично.