[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Определение базового URL сайта программно
sadex13
В конфигах разных CMS и форумов прописывается базовый URL сайта по типу:
$base_url  = ''http://some_site/smf/'; // например, для известного форума SMF

При этом при смене хостинга этот $base_url приходится прописывать заново вручную.

Вопрос к корифеям. Возможно ли определять автоматически, программно, этот самый базовый URL сайта, чтобы все работало при смене хостинга?

Пока ничего кроме
$base_url = 'http://'.$_SERVER['SERVER_NAME'].'/';

не пришло в голову.
sergeiss
$_SERVER['HTTP_HOST'] у меня прекрасно работает, именно для этих же целей.

Пишешь где-нибудь в начале строку
$base_address = 'http://'.$_SERVER['HTTP_HOST']


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
sadex13
sergeiss, благодарю за хороший ответ, подтвержденный практикой, и интерес к теме.

В некоторых описаниях пишут, что содержимое элемента $_SERVER['SERVER_NAME'] часто совпадает с содержимым элемента $_SERVER['HTTP_HOST'].

А почему все-таки $_SERVER['HTTP_HOST'] предпочтительнее, надежнее?
И есть ли некоторые случаи, когда это может не сработать?

Не спроста же разработчики многих CMS и форумов в конфигах прописывают значение этого $base_url вручную.
sergeiss
Цитата (sadex13 @ 24.02.2014 - 14:26)
Не спроста же разработчики многих CMS и форумов в конфигах прописывают значение этого $base_url вручную.

Тут хрень какая... В CMS и форумах есть много разных каталогов, где файлы сидят. И они подключаются (include/require) в других файлах. Если попробовать прописать относительные пути, то с высокой вероятностью не угадаешь. С абсолютными путями этой проблемы нет.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
Цитата
Не спроста же разработчики многих CMS и форумов в конфигах прописывают значение этого $base_url вручную

вот тут вы "хрен угадали" smile.gif
эти занчения прописывает инсталятор wink.gif

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Valick, не придирайся к словам smile.gif Человек имел ввиду, что это прописано в явном виде. А уж кто это сделал - это "дело десятое".

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
sadex13
sergeiss, примерно понятно. Для include/require я применяю
define('ROOT', dirname(__FILE__).'/'); 
вроде надежно работает. А вот когда ссылки собираю, выводимые на страницах сайта, то $base_url нужен. Хотя пока не врубаюсь, может их можно и относительно корня прописывать. Но с $base_url вроде надежнее.
sadex13
Valick, хорошая мысль, спасибо. Но почему бы тому же инсталлятору не прописать
$base_url = 'http://'.$_SERVER['HTTP_HOST'];

?
AllesKlar
sadex13
Цитата
Не спроста же разработчики многих CMS и форумов в конфигах прописывают значение этого $base_url вручную.

Это связано с тем, что CMS может быть установлена не в корень сайта, а в подкаталог.
И как правило, в инсталяторе предлагается уже путь, причем правильно.
Но, если какая Ж, то автоматика не сработает, а при ручном вводе CMS найдет себя гарантированно

Да и вообще в массиве $_SERVER добрая часть значений описывается, как "зависит от настроек сервера, работа не гарантирована", потому как $_SERVER - это то, что сказал сервер, а сказал он то, как настроил его пьяный админ, а виноваты потом разработчики CMS smile.gif


_____________
[продано копирайтерам]
sadex13
AllesKlar, полезная инфа. Значит, можно и так сделать, написать
$base_url = 'http://'.$_SERVER['HTTP_HOST'];

и строчкой ниже, в закомментированном виде
//$base_url  = 'http://some_site/my_cms/';

и перекидывать знаки комментария наверх и прописывать вручную, если первая строка не будет срабатывать. Примитивно, но универсально... Пока, может, что и лучше когда узнаю.
sadex13
Интересная инфа. Существует одно важное отличие между переменными http_host и server_name:
http://www.hostland.su/books/php5/page/31.html

Выдержка из текста по ссылке

Переменную окружения http_host очень часто путают с другой переменной, server_name. В большинстве случаев серверы конфигурируют так, что обе переменные содержат одинаковое значение (например, в Apache для этого существует директива useCanonicaiName off), однако возникают ситуации, когда это не так. Величина http_host всегда идентична тому доменному имени, который ввел пользователь в браузере, в то время как server_name иногда может содержать строку, жестко записанную в конфигурации сервера (в Apache это происходит при указании
UseCanonicaiName on).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.