Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Особенности ссылок (symlinks) в семействе Unix и родственных

#1 wwworm

wwworm
  • Пользователь
  • 1 сообщений
  • Репутация: 0
0

Отправлено 25 Октябрь 2012 - 13:36

Здравствуйте, хочу посоветоваться с уважаемым сообществом по поводу эксплуатации механизма ссылок в Юниксах/Линуксах.

Для начала опишу ситуацию: есть веб-сервер, на котором будет крутиться десяток однотипных новостных сайтов. Наполнение будет разным, а "движок" - один.
Соответственно возникла мысль, чтобы не плодить кучу одинаковых папок в разных доменах и чтобы проще обновлять и модифицировать движок сразу на ВСЕХ сайтах - воспользоваться ссылками на папки. Таким образом, если в папке оригинале добавляются/меняются файлы - они сразу добавляются/меняются во других ссылочных папках разных сайтов.

Идея была удачно обкатана на локальном апаче (так уж получилось, что он крутился не под линуксом, а под виндой) - все работает прекрасно. Когда слили на головной сервак - обнаружилась интересная особенность symlinks (в Линуксе) - если скрипт "переходит по ссылке" (меняется текущая рабочая папка), то он автоматически переходит и на другой сайт.

Продемонстрирую на примере. Есть два сайта: "demo1" и "demo2". В корне "demo1" лежит папка "engine", ссылка на которую помещается и в "demo2". Скрипт index.php выводит сначала имя текущей рабочей директории, потом меняет её на папку "engine" и повторно выводит имя текущей рабочей директории

Код index.php:

<?
echo 'starting cwd is "'.getcwd().'"<hr><br>';
chdir('engine');
echo ' NOW cwd is "'.getcwd();

----------------------------------------------

Результат вывода в Винде:
_______________________

starting cwd is "q:\home\demo2\www"

NOW cwd is "q:\home\demo2\www\engine

----------------------------------------------

Результат вывода в Юниксе:
_______________________

starting cwd is "/home/vps/data/www/demo2"

NOW cwd is "/home/vps/data/www/demo1/engine"

----------------------------------------------

Соответственно прошу помощи: как заставить Линукс переходя о ссылке не терять изначального домена, потому что скрипт то отработает нормально, но когда он захочет загрузить картинку или темплейт, то загрузка произойдет с другого сайта, что конечно недопустимо.

P.S. про директиву апача FollowSymLinks я слышал, но насколько удалось разобраться, она не подходит в данном случае, так как только позволяет или запрещает сам переход по ссылкам, а мне надо не только переходить, но и контролировать текущий путь.

 

 

  • 0

#2 Mr.Developer

Mr.Developer
  • Пользователь
  • 73 сообщений
  • Репутация: 12

Отправлено 07 Январь 2013 - 12:46

Подобный механизм работы используется в Битрикс когда много сайтов может работать на одном ядре.
Делаете симлинки на bitrix/ и upload/, добавляете в панели управления еще один сайт и вуаля! =)

Не понимаю зачем вам chdir() может понадобиться. Делайте симлинки на директории с ядром, с кэшем и с загружаемыми файлами. Должно все заработать нормально, главное не забудьте про конфиг движка, нужно чтобы у каждого сайта он был свой.
  • 0


Оформление форума – IPBSkins.ru