Эта тема на forum.dklab.ru


Eric-S: как узнать адрес сервера
Опять споткнулся на ровном месте (козалось бы). Кстати у движка aфорума smf с этим тоже проблемы.


Я получал имя сервера так:
$_SERVER["SERVER_NAME"]
И было всё ок, пока не зашел со второго компьютера.


В результате у меня оказалось несколько вариантов, причём только один правильный.

И так, я перечислю их, (замоскировав конечно же реальные значения)

example.com # официальный домен
93.100.*.* # внешний ip
192.0.0.1 # wifi
169.0.0.1 # виртуальное
myserver # имя компьютера
localhost
127.0.0.1

Хм! И как же мне получить домен, а не всё остальное, не завися от того, откуда я подключаюсь?
dimagolov:
http://www.php.net/manual/en/reserved.variables.php#78529

то есть это то, как к сайту обращается клиент.
можно делать переадресацию на "основное" имя сайта, если хотите, чтобы сайт работал только через него.
Eric-S:
Да, именно, как я обращаюсь к серверу. А мне нужен его правильный адрес.

Но юмор-то весь в том, что мне это нужно для установщика.

Тоесть вот например беру я движок smf и ставлю его из локалки.
Он у меня радостно устанавливаеться для
http://myserver/forum
После чего из интернета невидим.

С моим движком точно такая же история.
dimagolov:
Eric-S, зачем движку знать свой домен в момент исполнения отдельных скриптов? даже если этот скрипт установщика? если с smf та же беда, что и у Вас, то это значит, что и Вы и разработчики smf сделали одинаковые ошибки.
Eric-S:
Если чесно, то в smf я не тестировал, на вход с других адресов, но на первом же шаге, он интересуеться путём и там чётко определяеться тот адрес, по которому я открывал сайт.

А у меня... Видимо это действительно считать нужно ошибкой.
У меня этот адрес вбивается в конфигурацию, а потом используеться, при создании ссылок.
Например когда пользователю отправляеться письмо для активации.
Когда я продумывал сиё решение, оно показалось мне верным. Ведь кто знает, какой сервер запускает. Но верно похоже и обратное.
dimagolov:
Вбивайте в конфигурацию или адрес руками, или не надо конфигурации и смотрите каждый раз на $_SERVER["SERVER_NAME"].
У меня для пользования в рассылках прописан адрес руками, типа чтобы красивый был всегда. В свое время тоже озадачивался этой проблемой и пришел к выводу, что такой вариант наиболее оптимален. В 99% случаях достаточно относительных ссылок, броузеры и так разворачивают относительные ссылки в полные.
Eric-S:
У меня по сайту, почти везде относительные ссылки.

Разве что вот action в формах, в разных e-mail уведомлениях и в теге base идёт ссылка из конфигурационного файла.
А туда она заноситься при установке системы.
Я конечно умный, да и есть другие люди, которые поймут прикол, когда увидят при установке
http://myserver
Вместо
http://example.com

Но я неприятно удивился обнаружив подобную неправильность.

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

Но всё равно, если автозаполнение, то можно же его как-то скорректировать.

Кстати, кудаже делось имя сервера, которое я вбивал в апач? Тамже так и написано
servername example.com

Хотя это тоже нельзя считать последней инстанцией.

А может быть попробовать сделать какое-нибудь обращение к dns или ещё к кому-нибудь в инете, типа ответь мне кто я?!
dimagolov:
Eric-S, давайте завязывать. Таким прописыванием домена Вы заставите пользователей иметь доступ к сайту исключительно из интернета. Все, кто захотят увидеть его из локалки минуя интернет роутер пойдут за елки, поэтому в html код домен вставлять крайне не рекомендуется. кроме того:
1. в action достаточно $_SERVER['PHP_SELF']
2. base имеет смысл, если лениться писать путь от корня сайта. првктической пользы не вижу.
3. про email уже писал - пропишите раз руками и не мучайтесь. тут уж никак не угадаешь откуда получатель будет читать почту, так что стоит ориентироваться на наиболее широкое применение, которое как ни крути определять придется руками
4. что прописано в конфиге апача особой практической ценности не несет и, на сколько я разобрался в вопросе, добраться до этого значения из php нельзя.
5. про какой dns можно говорить? если к серверу есть доступ как снаружи так и изнутри сети, а прописать Вы хотите в конфиг.
Eric-S:
Ок! Ясненько.
Ну что, пойду приводить код в порядок.
dimagolov, вы меня на путь истенный наставили, за что и благодарность.

Эта тема на forum.dklab.ru