PHP: получить название основного домена находясь на поддомене

SB
На сайте с 06.11.2011
Offline
11
10332

Задача такая:

Проверяем :Если скрипт запущен на домене второго уровня, то выдаем соответственно название домена. Если при проверке выясняется что скрипт запущен на домене третьего уровня, то также, выдаем название основного домена (второго уровня).

Как это реализовать на PHP?

Понятно, что чтобы получить название текущего сайта используеся $_SERVER['SERVER_NAME']. А дальше затык.

Предлагаю выгодное приватное решение для конверта Вашего трафика. Принимается трафик с доров и белых проектов. Обращайтесь в личку.
DV
На сайте с 01.05.2010
Offline
644
#1

Регекспом точку обнаружить.

Можно с помощью strpos посчитать все точки.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
ХЗ
На сайте с 31.08.2008
Offline
155
#2

а если explode, если $str[2] не пусто, то третий уровень

SB
На сайте с 06.11.2011
Offline
11
#3
DenisVS:
Регекспом точку обнаружить.
Можно с помощью strpos посчитать все точки.

Ок, обнаружил я что точки две, и как мне вывести название основного домена при условии что скрипт сам на поддомене? Необходимо чтобы скрипт выдал бы название основного домена независимо от того на поддомене он запущен либо на основном домене.

DV
На сайте с 01.05.2010
Offline
644
#4

Отрубите то, что до точки, вместе с точкой. Остаток и есть ваш домен. Рубить можно с помощью substr, используя позицию, извлеченную функцией strpos.

SB
На сайте с 06.11.2011
Offline
11
#5

Спасибо всем. У меня получилось вот что:

<?

$xnumer = explode(".", $_SERVER['SERVER_NAME']);

if (sizeof($xnumer)==3)

{

echo $xnumer[1].".".$xnumer[2];

}

else

{

$xdomain=$_SERVER['SERVER_NAME'];

}

echo $xdomain;

?>

Проверьте на вшивость пожалуйста, нигде я не накосячил?

edogs software
На сайте с 15.12.2005
Offline
775
#6
Site Builder:
Спасибо всем. У меня получилось вот что:

<?
$xnumer = explode(".", $_SERVER['SERVER_NAME']);
if (sizeof($xnumer)==3)
{
echo $xnumer[1].".".$xnumer[2];
}
else
{
$xdomain=$_SERVER['SERVER_NAME'];
}
echo $xdomain;
?>

Проверьте на вшивость пожалуйста, нигде я не накосячил?

Все же более правильно $_SERVER['HTTP_HOST']

Плюс Вы же можете оказаться по идее на домене sdf.sdfff.domain.com, поэтому лучше полагаться на "хвост".

Итого правильнее


list($x1,$x2)=explode('.',strrev($_SERVER['HTTP_HOST']));
$xdomain=$x2.'.'.$x1;
echo strrev($xdomain);
Site Builder:
Вот это оптимизация кода! Но меня в ступор вогнала команда strrev. Зачем реверсить то?

Что бы легко взять 2 последних значения, переворачиваем - они оказываются 2 первыми, их и берем. В противном случае пришлось бы гадать - оказываются нужные значения после explode 1 и 2 или 0 и 1... или для домена 5 уровня допустим - 3 и 4:)

Site Builder:

Мож правильнее тогда так?
list($x1,$x2)=explode('.',strrev($_SERVER['HTTP_HOST']));
$xdomain=$x1.'.'.$x2;
echo strrev($xdomain);

Да, Вы правы:) поправили выше.

Или еще можно


list($x1,$x2)=array_reverse(explode('.',$_SERVER['HTTP_HOST']));
$xdomain=$x2.'.'.$x1;
echo $xdomain;
Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
SB
На сайте с 06.11.2011
Offline
11
#7
list($x1,$x2)=explode('.',strrev($_SERVER['HTTP_HOST']));
$xdomain=$x2.'.'.$x1;
echo $xdomain;

Вот это оптимизация кода!

Мож правильнее тогда так?

list($x1,$x2)=explode('.',strrev($_SERVER['HTTP_HOST']));

$xdomain=$x1.'.'.$x2;

echo strrev($xdomain);

СПАСИБО ВСЕМ!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий