| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Относительный путь и текущая папка |
| Автор: Vitalik 1.8.2007, 18:44 | ||||
| Здравствуйте!.. Возникла такая проблема.. Есть проект, находящийся в папке /htdocs/project/ Стартовый файл: /htdocs/project/index.php Внутри файла index.php инклудится файл /htdocs/project/sub1/sub2/somefile.inc
Внутри файла sub1/sub2/somefile.inc необходимо инклудить файл, находящийся в родительской папке, то есть к примеру файл sub1/need_to_incude.inc Раньше я делал так:
Уже есть очень много файлов в папке sub1, и много папок вида sub2 с многими файлами внутри, которые инклудят эти первые файлы из папки sub1. Поэтому менять везде короткий относительный путь на полный абсолютный совсем не хочется.. Еще этого не хочется делать потому как при составлении этих файлов хочется чтобы они выглядели компактнее, тогда с ними удобнее работать.. |
| Автор: Всемогущий 1.8.2007, 19:55 |
| Мне кажется можно использовать такой метод: после каждого инклуда автоматически добавлять абсолютный адресс в include_path |
| Автор: mishaSL 1.8.2007, 20:05 |
| Какой-то странный метод. Может я не понял, можно пример? |
| Автор: Всемогущий 2.8.2007, 04:32 | ||
заменяем include на myinclude
|
| Автор: Fally 2.8.2007, 11:05 | ||
Vitalik, Попробуй вот так:
|
| Автор: Vitalik 3.8.2007, 12:52 |
| Большое спасибо всем ответившим Простого решения этой проблемы, наверное, действительно нет.. Вполне возможно, что в PHP5 просто текущей директорией считается та, в которой находится самый первый "вызывающий" php-скрипт. А PHP4 по видимому текущей директорией была та, в которой находится текущий выполняемый php-скрипт (который мог быть инклуден в другой, в "вызывающий").. Хотелось бы увидеть такое решение проблемы, чтобы не надо было перелопачивать все файлы.. Думал, что можно, просто поменяв какую-нить директиву, сказать об этом 5-му PHP. Но раз это не представляется возможным, то есть в любом случае нужно будет проводить реорганизацию кода, то я решил сделать все несколько по-другому. Наверное, так даже будет удобнее. Все файлики need_to_include.inc будут собраны в одном большом, при чем они будут в виде функций. А в файлах вида somefile.inc нужно будет делать не инклуды, а вызовы этих функций. (естественно названия файлов я здесь привел вымышленные) Таким образом, эта проблема в данном случае отпадает, так и не найдя своего решения.. Еще раз спасибо за попытки помочь! |
| Автор: Mal Hack 3.8.2007, 12:57 |
| Есть более простой путь и более правильный. Во всех include'ах, fopen'ах, пишем полный путь /home/www/..../file.php. Дабы избавиться от лишних правок, корень выносится в константу, которая в include конкатенируется с именем и путем файла от корня, т.е. в данном случае include(DIR."/sub2/include.php"); |
| Автор: Vitalik 3.8.2007, 16:26 | ||
В принципе ведь, если написать
Кстати, вопрос может быть немножко не в тему, но все же.. Файлы, которые инклудятся принято делать с расширением inc или не стоит так делать и лучше, чтобы у всех было php?.. |
| Автор: Mal Hack 3.8.2007, 16:38 |
| Файлы с полным путем инклудяться быстрее, плюс это избавит от многих непонятных ошибок... Лучше - php. |
| Автор: sTa1kEr 3.8.2007, 19:16 | ||||
Vitalik, если хотите использовать относительные пути, то лучше всего подойдет такая конструкция
Т.е. для инклюда путь будет абсолютным, а для вас относительным.
Не советую использовать расширение inc. Т.к. по умолчанию такой файл будет интерпретироваться апачем как текстовый, что может привести к проблеме в безопасности. В крайнем случае лучше использовать inc.php. |
| Автор: Vitalik 3.8.2007, 19:40 |
Можно дурацкий вопрос?.. Чем лучше расширение php?.. Просто я вот как-то раньше думал, что логичнее выглядит, если php - это файлы, которые могут быть запущены отдельно, а inc - это файлы, которые имеют смысл только если их инклудить.. Но вот недавно услышал такую вещь, что лучше использовать всегда php из-за того, что при загрузке из браузера php-код никогда виден не будет, а inc'овские файлы могут загрузиться как текстовые показав клиенту весь свой исходный код.. Есть ли еще какие-то причины не использовать расширение inc?.. Добавлено через 3 минуты и 33 секунды sTa1kEr, пасибки Пока я набивал сообщение (пару раз приходилось отходить надолго) вы уже написали похожий ответ (про inc-файлы), спасибо |