Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как узнать корневую папку сайта, если он в подпапке?
Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012
Помог: 1 раз(а)
Есть файлы php, в которых при создании вкладывается инклуд, запрашивающий файл из папки include, что лежит в корне сайта.
Файлы эти раскладываются в папки различной глубины вложения, например - один в:
/files/
другой в
/files/ink/
третий в
/files/inka/
четвертый в
/files/inka/rubo/
т.е. заранее проблематично вписать, например, ../../incl/include.php, так как заранее не известно, сколько ../ понадобиться для выхода в корень сайта.
Конечно, если сайт лежит в КОРНЕ - проблем нет - $_SERVER['DOCUMENT_ROOT']/incl/include.php и готово.
Но если не в корне? Причем опять же, не знаю, в какую папку от корня запихнут это творение.
Как передать в эти файлы путь, если сайт лежит не в корне сервера, или как узнать, насколько надо выйти вверх (с помощью ../ ) для правильного вызова incl/include.php ?
Например, фактически сайт могут засунуть в $_SERVER['DOCUMENT_ROOT']/!!!
Ну не высчитывать же "глубину" вложения во время создания файлов?! Или.?
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
В общем случае такая задача решается через конфигурационный файл в веб-приложении. Иначе - никак (скрипт ведь не может догадываться, в какой подкаталог поместили веб-приложение), либо же - скрипт должен "знать структуру", чтобы использовать относительные пути. В случае же с абсолютными - только конфиг.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
caballero
Отправлено: 19 Апреля, 2013 - 21:41:54
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012
Помог: 1 раз(а)
caballero пишет:
__DIR__ в index.php
Это само собой, но для конкретного файла. А как передать в?
EuGen пишет:
В общем случае такая задача решается через конфигурационный файл в веб-приложении.
А как обращаться из тех файлов в этот конфигурационный файл?
ЗЫ. БД НЕТ.
----- Истина прежде всего в том, что...
caballero
Отправлено: 19 Апреля, 2013 - 21:44:38
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Это само собой, но для конкретного файла. А как передать в?
на так запиши в сессию или куда там (Добавление)
а вообще если index,php точка входа как сейчас общепринято тот переменная всегда будет под руками - обяви константу в начале файла и всен
Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012
Помог: 1 раз(а)
Хм... можно, конечно, в них заложить запрос дирфайла, а затем, зная, какая папку первая посчитать количество слэшей, чтобы узнать сколько относительных "подьемов" ../ надо сделать.
Но дурдом же... (Добавление)
Константа через define работает внутри файла, но когда я из этого файла запрашиваю джаваскриптом подгрузку тех файлов, они уже константы не видят.
В сассию, конечно, можно... но и так там много. Да и выкладывать пути на всеобщее обозрение не хочется. (Добавление)
Алгоритм:
1. При запуске точки входа создаю переменную сессии, куда вписываю "путь от корня сайта":
если корень, то "/"
если другая папка, то "/имя_этой_папки"
2. В файле запрашиваю dirname(__FILE__)
3. Ищу, где в нем то, что получил из переменной сессии из пункта 1
4. Отрезав начало, по количеству "/" узнаю "глубину вложения текущего файла"
5. делаю столько "../", сколько глубина вложения.
6. Получаю относительный путь типа "../../../incl/include.php"
Как считаете, покатит? Порно, конечно, но, вроде, должено работать.
Плохо только то, что если файл запросят напрямую и переменной сессии не будет - хрен что получится. Хотя как раз это может работать как защита от прямого обращения - нет переменной - иди на йух.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
LShark пишет:
Как считаете, покатит?
Не прокатит.
Выше уже сказали как правильно делать надо.
Единая точка входа, даже для аякса, константа корневой папки определенная в индексе (бутстрапе) - проблема решена.
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
вообще, размещение сайтов не в корне по нынешним временам даже как то странно. Когда то на хостигах экономили пихали кучу спйтов в один виртуальный каталог а сейчас то чего
Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012
Помог: 1 раз(а)
caballero пишет:
вообще, размещение сайтов не в корне по нынешним временам даже как то странно. Когда то на хостигах экономили пихали кучу спйтов в один виртуальный каталог а сейчас то чего
Знаю, но вот поставили такую задачу.
Для "в корне" у меня все работает и нет проблем. Но вот такую задницу подкинули заданием - этот фрагмент сайта может лежать в подпапке. "ибо нейух" сказало мне "большое начальство".
----- Истина прежде всего в том, что...
DeepVarvar
Отправлено: 19 Апреля, 2013 - 23:15:18
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
LShark пишет:
этот фрагмент сайта может лежать в подпапке
С единой точкой входа такой проблемы просто не возникнет.
Индексный файл положи куда хочешь, в нем определи путь до приложения, которое может вообще лежать выше доступной директории (за исключением конечно же статики), подключи, запусти, наслаждайся.
Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012
Помог: 1 раз(а)
Ch_chov пишет:
getcwd
Чтение вопроса без понимания сути вопроса не дает нужного ответа.
DeepVarvar пишет:
Индексный файл положи куда хочешь, в нем определи путь до приложения,
В этом то и проблема. Положить что то в папку, имя которой заранее не известно, да еще отследить, насколько эта папка выше корня сайта, да еще потом сделать универсальное решение, чтобы все файлы, разбросанные по подпапкам этого проекта знали, где корень проекта. при этом половина этих файлов динамически подключается через аякс, базу данных использовать невозможно (так как нечему там храниться в БД), так что передавать в них напрямую переменные - кисловато.
"Кто умеет - делает. Кто не умеет делать - тот учит. Кто не умеет учить - тот управляет".
Вот поэтому у начальства "Идей громадьё", а голова болит у меня.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
LShark пишет:
Причем опять же, не знаю, в какую папку от корня запихнут это творение.
у вас его по нескольку раз на дню переносят из папки в папку? нет. значит при установке можно один раз задать в конфигурациюнном файле пути.
$config = arry(
'app_dir' => ...
...
);
я так понимаю, приложение у вас уже готове, и не подлежит переписыванию? Тогда сам конфиг подключать ко всем файлам директивой auto_prepend_file.
Но в идеале, как сказал DeepVarvar - через единую точку входа.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.