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
Форумы портала PHP.SU :: Версия для печати :: Как узнать корневую папку сайта, если он в подпапке?
Форумы портала PHP.SU » » Вопросы новичков » Как узнать корневую папку сайта, если он в подпапке?

Страниц (1): [1]
 

1. LShark - 19 Апреля, 2013 - 21:39:25 - перейти к сообщению
Есть файлы 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']/!!!

Ну не высчитывать же "глубину" вложения во время создания файлов?! Или.?
2. EuGen - 19 Апреля, 2013 - 21:41:29 - перейти к сообщению
В общем случае такая задача решается через конфигурационный файл в веб-приложении. Иначе - никак (скрипт ведь не может догадываться, в какой подкаталог поместили веб-приложение), либо же - скрипт должен "знать структуру", чтобы использовать относительные пути. В случае же с абсолютными - только конфиг.
3. caballero - 19 Апреля, 2013 - 21:41:54 - перейти к сообщению
__DIR__ в index.php
4. LShark - 19 Апреля, 2013 - 21:43:36 - перейти к сообщению
caballero пишет:
__DIR__ в index.php


Это само собой, но для конкретного файла. А как передать в?

EuGen пишет:
В общем случае такая задача решается через конфигурационный файл в веб-приложении.

А как обращаться из тех файлов в этот конфигурационный файл?
ЗЫ. БД НЕТ.
5. caballero - 19 Апреля, 2013 - 21:44:38 - перейти к сообщению
Цитата:
Это само собой, но для конкретного файла. А как передать в?

на так запиши в сессию или куда там
(Добавление)
а вообще если index,php точка входа как сейчас общепринято тот переменная всегда будет под руками - обяви константу в начале файла и всен
6. LShark - 19 Апреля, 2013 - 21:46:12 - перейти к сообщению
Хм... можно, конечно, в них заложить запрос дирфайла, а затем, зная, какая папку первая посчитать количество слэшей, чтобы узнать сколько относительных "подьемов" ../ надо сделать.
Но дурдом же...
(Добавление)
Константа через define работает внутри файла, но когда я из этого файла запрашиваю джаваскриптом подгрузку тех файлов, они уже константы не видят.

В сассию, конечно, можно... но и так там много. Да и выкладывать пути на всеобщее обозрение не хочется.
(Добавление)
Алгоритм:
1. При запуске точки входа создаю переменную сессии, куда вписываю "путь от корня сайта":
если корень, то "/"
если другая папка, то "/имя_этой_папки"

2. В файле запрашиваю dirname(__FILE__)
3. Ищу, где в нем то, что получил из переменной сессии из пункта 1
4. Отрезав начало, по количеству "/" узнаю "глубину вложения текущего файла"
5. делаю столько "../", сколько глубина вложения.
6. Получаю относительный путь типа "../../../incl/include.php"

Как считаете, покатит? Порно, конечно, но, вроде, должено работать.

Плохо только то, что если файл запросят напрямую и переменной сессии не будет - хрен что получится. Хотя как раз это может работать как защита от прямого обращения - нет переменной - иди на йух.
7. DeepVarvar - 19 Апреля, 2013 - 22:01:37 - перейти к сообщению
LShark пишет:
Как считаете, покатит?
Не прокатит.
Выше уже сказали как правильно делать надо.
Единая точка входа, даже для аякса, константа корневой папки определенная в индексе (бутстрапе) - проблема решена.
8. caballero - 19 Апреля, 2013 - 22:05:09 - перейти к сообщению
вообще, размещение сайтов не в корне по нынешним временам даже как то странно. Когда то на хостигах экономили пихали кучу спйтов в один виртуальный каталог а сейчас то чего
9. LShark - 19 Апреля, 2013 - 22:07:21 - перейти к сообщению
caballero пишет:
вообще, размещение сайтов не в корне по нынешним временам даже как то странно. Когда то на хостигах экономили пихали кучу спйтов в один виртуальный каталог а сейчас то чего

Знаю, но вот поставили такую задачу.

Для "в корне" у меня все работает и нет проблем. Но вот такую задницу подкинули заданием - этот фрагмент сайта может лежать в подпапке. "ибо нейух" сказало мне "большое начальство".
10. DeepVarvar - 19 Апреля, 2013 - 23:15:18 - перейти к сообщению
LShark пишет:
этот фрагмент сайта может лежать в подпапке
С единой точкой входа такой проблемы просто не возникнет.
Индексный файл положи куда хочешь, в нем определи путь до приложения, которое может вообще лежать выше доступной директории (за исключением конечно же статики), подключи, запусти, наслаждайся.
11. Ch_chov - 20 Апреля, 2013 - 06:27:56 - перейти к сообщению
12. LShark - 20 Апреля, 2013 - 07:28:23 - перейти к сообщению
Ch_chov пишет:
getcwd

Чтение вопроса без понимания сути вопроса не дает нужного ответа.

DeepVarvar пишет:
Индексный файл положи куда хочешь, в нем определи путь до приложения,

В этом то и проблема. Положить что то в папку, имя которой заранее не известно, да еще отследить, насколько эта папка выше корня сайта, да еще потом сделать универсальное решение, чтобы все файлы, разбросанные по подпапкам этого проекта знали, где корень проекта. при этом половина этих файлов динамически подключается через аякс, базу данных использовать невозможно (так как нечему там храниться в БД), так что передавать в них напрямую переменные - кисловато.

"Кто умеет - делает. Кто не умеет делать - тот учит. Кто не умеет учить - тот управляет".

Вот поэтому у начальства "Идей громадьё", а голова болит у меня.
13. DelphinPRO - 20 Апреля, 2013 - 10:42:16 - перейти к сообщению
LShark пишет:
Причем опять же, не знаю, в какую папку от корня запихнут это творение.

у вас его по нескольку раз на дню переносят из папки в папку? нет. значит при установке можно один раз задать в конфигурациюнном файле пути.

$config = arry(
'app_dir' => ...
...
);

я так понимаю, приложение у вас уже готове, и не подлежит переписыванию? Тогда сам конфиг подключать ко всем файлам директивой auto_prepend_file.
Но в идеале, как сказал DeepVarvar - через единую точку входа.

 

Powered by ExBB FM 1.0 RC1