Нужна зацепка по т.н. мультисайтингу. Немного о ситуации: Есть собственный комплекс серверов и действующий хенд-мейд модульный ООП-движок от прежних программистов. Модули, представленные классами, сами описывают свой функционал и права доступа посредством статических методов, которые ядро использует по мере надобности. В общем, начинка довольно перспективная. Описания или упоминаний вообще нигде не нашёл, поэтому провёл свои исследования. Переписал код с PHP 4 на PHP 5, подключил в основу собственный фреймворк - в результате в режиме заполнения шаблона блоками из базы система отдаёт страницу за 0.011 сек вместо прежних ~0.2-0.3 да экономит ОЗУ в процессе выполнения - 64 Кб на жизненный цикл вместо ~540. Однако возникла необходимость мультисайтинга на поддоменах (коих будет более 400). Как их выделять динамически (без админа с его манипуляциями DNS), какая архитектура должна быть у базы? Есть общая часть (например, прайс-листы, по которым идёт поиск на одной таблице) и часть, требующая разделения: страницы и подключенные к ним модули, текстовые блоки. Вроде, есть принципы с разными базами / таблицами с префиксом, однако возникает сомнение относительно целостности данных - такое не отследить по внешнему ключу (с базой работает и специализированное ПО, не имеющее прямого отношения к сайту). Настроена связка PHP 5.3 (готовится переход на 5.4 после выхода релиза wincache) + MS SQL Server (SQL Server Driver for PHP 3.0) под управлением IIS 7.0 Система при необходимости может тянуть (да местами так и делает) из своих закромов функционал Zend Framework, путь к которому упоминается в автозагрузчике классов.
Ваше сообщение производит.. двоякое впечатление. Ладно, промолчу. По существу - у DNS сервера существует запись вида *.domain, что инструктирует его отвечать указанным адресом для всех поддоменов. Веб-сервер так же нужно настроить, что бы он был "дефаултным", т.е. принимал запросы для Host: которые не описаны напрямую в конфиге. Ну и как итоговая стадия - запрошенный домен вы получите в HTTP_HOST
Вот! То, что надо. Если я правильно понял, для ссылок на домен (общие ресурсы и сервисы) останется SERVER_NAME, который заполняется сервером, а для поддоменных - HTTP_HOST, который идёт от клиента. Однако наслышан, что последний можно подделать (в моём разумении - скрыть). Реальна ли такая проблема? Безусловно, вводная часть темы диковата и сводится большей частью к администрированию сервера, нежели PHP. Однако искомая зацепка получена, благодарю.
SERVER_NAME - это то, что ставит сам сервер. Как правило это имя сервера из конфига. HTTP_HOST - это тупо HTTP заголовок, так что там можно написать все что угодно. Подделать можно, конечно, но ради чего? В голову не приходит, как это может помешать. Если просто о логике, то да, учитывайте, что там может быть что угодно, т.е. проверки делайте.
Сейчас проверил на свободных привязках, действительно работает - в IIS на основном сайте просто нужно оставить пустым имя узла. В этом случае SERVER_NAME содержит то же, что и HTTP_HOST, а именно - хост с поддоменом.
действительно ))) зачем его подделывать, если именно этот заголовок и определяет к какому домену мы обратились, т.е. что мы набрали в адресной строке. веб-сервер читает этот заголовок и по нему (+ возможно по порту) выбирает свой "виртуальный" сервер. если в заголовке будет чушь, то запрос обломается, либо будет обработан виртуальным сервером по умолчанию. зависит от настроек. в общем значение достоверно