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 :: Как узнать корневую папку сайта, если он в подпапке?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Точнее, как передать этот путь в другой файл.
LShark
Отправлено: 19 Апреля, 2013 - 21:39:25
Post Id



Частый гость


Покинул форум
Сообщений всего: 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']/!!!

Ну не высчитывать же "глубину" вложения во время создания файлов?! Или.?

(Отредактировано автором: 19 Апреля, 2013 - 21:42:05)



-----
Истина прежде всего в том, что...
 
 Top
EuGen Администратор
Отправлено: 19 Апреля, 2013 - 21:41:29
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
caballero
Отправлено: 19 Апреля, 2013 - 21:41:54
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




__DIR__ в index.php


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
LShark
Отправлено: 19 Апреля, 2013 - 21:43:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




caballero пишет:
__DIR__ в index.php


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

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

А как обращаться из тех файлов в этот конфигурационный файл?
ЗЫ. БД НЕТ.


-----
Истина прежде всего в том, что...
 
 Top
caballero
Отправлено: 19 Апреля, 2013 - 21:44:38
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




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

на так запиши в сессию или куда там
(Добавление)
а вообще если index,php точка входа как сейчас общепринято тот переменная всегда будет под руками - обяви константу в начале файла и всен


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
LShark
Отправлено: 19 Апреля, 2013 - 21:46:12
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




Хм... можно, конечно, в них заложить запрос дирфайла, а затем, зная, какая папку первая посчитать количество слэшей, чтобы узнать сколько относительных "подьемов" ../ надо сделать.
Но дурдом же...
(Добавление)
Константа через define работает внутри файла, но когда я из этого файла запрашиваю джаваскриптом подгрузку тех файлов, они уже константы не видят.

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

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

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

Плохо только то, что если файл запросят напрямую и переменной сессии не будет - хрен что получится. Хотя как раз это может работать как защита от прямого обращения - нет переменной - иди на йух.

(Отредактировано автором: 19 Апреля, 2013 - 21:56:55)



-----
Истина прежде всего в том, что...
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2013 - 22:01:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




LShark пишет:
Как считаете, покатит?
Не прокатит.
Выше уже сказали как правильно делать надо.
Единая точка входа, даже для аякса, константа корневой папки определенная в индексе (бутстрапе) - проблема решена.
 
 Top
caballero
Отправлено: 19 Апреля, 2013 - 22:05:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




вообще, размещение сайтов не в корне по нынешним временам даже как то странно. Когда то на хостигах экономили пихали кучу спйтов в один виртуальный каталог а сейчас то чего


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
LShark
Отправлено: 19 Апреля, 2013 - 22:07:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




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

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

Для "в корне" у меня все работает и нет проблем. Но вот такую задницу подкинули заданием - этот фрагмент сайта может лежать в подпапке. "ибо нейух" сказало мне "большое начальство".


-----
Истина прежде всего в том, что...
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Апреля, 2013 - 23:15:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




LShark пишет:
этот фрагмент сайта может лежать в подпапке
С единой точкой входа такой проблемы просто не возникнет.
Индексный файл положи куда хочешь, в нем определи путь до приложения, которое может вообще лежать выше доступной директории (за исключением конечно же статики), подключи, запусти, наслаждайся.
 
 Top
Ch_chov
Отправлено: 20 Апреля, 2013 - 06:27:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




 
 Top
LShark
Отправлено: 20 Апреля, 2013 - 07:28:23
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




Ch_chov пишет:
getcwd

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

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

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

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

Вот поэтому у начальства "Идей громадьё", а голова болит у меня.

(Отредактировано автором: 20 Апреля, 2013 - 07:30:25)



-----
Истина прежде всего в том, что...
 
 Top
DelphinPRO
Отправлено: 20 Апреля, 2013 - 10:42:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




LShark пишет:
Причем опять же, не знаю, в какую папку от корня запихнут это творение.

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

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

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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB