Как прописать путь для инклуда?

12
L
На сайте с 14.05.2007
Offline
153
7448

Есть файл site.ru/include/menu.php

Его надо заинклудить в site.ru/folder/info/main.php

Как прописать инклуд в файле такого уровня вложенности?

Пробовал:

<?include "include/menu.php"?>
<?include "/include/menu.php"?>
<?include "../include/menu.php"?>

и не работает никак...пишет что файл не найден.

Warning: include() [function.include]: Failed opening '../inc/menu.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in ...........
[Удален]
#1

<?include "../../include/menu.php"?>

попробуй так :)

S
На сайте с 26.04.2006
Offline
86
#2

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

<?php include ($_SERVER["DOCUMENT_ROOT"]."/include/menu.php"); ?> - путь определяется автоматически и его не придется корректировать даже при смене хостинга

<?php include ("/home/login/www/donem.ru/public_html/include/menu.php"); ?> - путь от корня сервера (точно можно узнать у хостера или глянуть в SSH)

Можете создать конфиг файл и в нем прописать одни раз путь от корня сервера

<?php

$put = “/home/login/www/donem.ru/public_html/”;

?>

А в скриптах уже писать следующее

<?php

include ($put."include/menu.php");

?>

И т.п. уже на Ваш вкус

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

Progr@mmer\.
На сайте с 14.10.2007
Offline
44
#3

Только всегда нужно ставить не относительные пути, а абсолютные.


include_once(dirname(__FILE__) . '/../../include/menu.php');

p.s.: опередили :)

Вашей девушке не хватает романтики? Черпните её на сайте «Я Люблю Романтику» (http://iloveromantics.ru/). Романтический форум (http://forum.iloveromantics.ru/) для отдыха от нудной работы.
[Удален]
#4
Progr@mmer\.:
Только всегда нужно ставить не относительные пути, а абсолютные.

include_once(dirname(__FILE__) . '/../../include/menu.php');

,ольше соглашусь именно с этим методом :)

а вот прошлый пост из серии Joomla style programming.

bearman добавил 18.06.2008 в 12:53

и еще вопрос, зачем использовать абсолютные пути всегда ? особенно которые в файле прописываются это пипец, а не программирование)

SJ
На сайте с 16.03.2008
Offline
78
#5
bearman:
а вот прошлый пост из серии Joomla style programming.

Прошлый пост - там где один раз в конфиге задается константа put = “/home/login/www/donem.ru/public_html/”; а потом просто юзается где надо конкатенация - из серии "думаю головой когда програмлю".

А включение где попало dirname(__FILE__) . '/../../include/menu.php'); это конечно крутой хак-стайл, вот только когда у вас инклуды или меню переедет в другую папку матов будет...

Да и считать постоянно на сколько уровней вверх ломится - занятие для кодеров, а не программистов.

"The downside here is that this expression is dynamic - executed at run-time. Meaning it’s slower and less toolable and also makes a bad habit of putting dynamic things into include (which is not a problem here, since it’s “static dynamic” thing, but still a bad habit)."

Любимый хостинг (http://beget.ru?id=2902) How can we grow old when the soundtrack of our lives is rock-n-roll?
[Удален]
#6

хахаха, ну ладно. меня все равно не переубедить. вопрос удобства. на самом деле ни скорость, ни трехуровневость ни мешают использовать оба метода.

L
На сайте с 14.05.2007
Offline
153
#7
Strom:
<?php include ($_SERVER["DOCUMENT_ROOT"]."/include/menu.php"); ?> - путь определяется автоматически и его не придется корректировать даже при смене хостинга

Увы не пашет...

Progr@mmer\.
На сайте с 14.10.2007
Offline
44
#8
bearman:
и еще вопрос, зачем использовать абсолютные пути всегда ?

Это нужно для того, чтоб PHP интерпритатор не горел в адском огне. Ну, и, конечно, скорость + удобство.

sokol_jack:
Прошлый пост - там где один раз в конфиге задается константа put = “/home/login/www/donem.ru/public_html/”; а потом просто юзается где надо конкатенация - из серии "думаю головой когда програмлю".

Этот прошлый пост из рода: "перееду на другой хостинг - буду переписывать всю CMS".

sokol_jack:
А включение где попало dirname(__FILE__) . '/../../include/menu.php'); это конечно крутой хак-стайл, вот только когда у вас инклуды или меню переедет в другую папку матов будет...

Покажите мне хоть один способ, при котором не будет матов, если файл "переедет"! (за исключением способа занесения имени файла в переменную и её дальнейшее использование)

sokol_jack:
Да и считать постоянно на сколько уровней вверх ломится - занятие для кодеров, а не программистов.

Объясните своё понимание терминов "кодер" и "программист".

bearman:
хахаха, ну ладно. меня все равно не переубедить.

Ну и зря. Отвратительнейшая позиция.

-----

Самое верное решение, это написать в начале index.php следующую строку (аля/aka DataLife Engine):


define('CMS_ROOT_DIR', dirname(__FILE__));

а потом использовать её префиксом во всех вызовах функций include()/include_once()/require()/require_once(). Только тут главное не забыть, что путь будет без конечного слеша.

[Удален]
#9

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

:-D

SJ
На сайте с 16.03.2008
Offline
78
#10
bearman:
еще проще инклудить по умному, а не расчеты делать глупые и бессмысленные. у меня позиия самая правильная, ибо я уверен в своей точке зрения. да и вообще это разгвор на пустом месте "как инклудить файл", тема схожая с "как написать хелло ворд на пхп"

Чем хорош все-таки и страшен php - порог вхождения очень низок. А вот вырастают потом - очень немногие...

У меня позиция еще правильнее, поскольку я не просто уверен в своей точке зрения, а могу и пытаюсь аргументированно ее обьяснить. О том, что не один год опыта за плечами буду скромно молчать 🚬

Писать надо сразу оптимально. Тогда поддерживать и развивать будет потом гораздо проще и быстрее.

Progr@mmer\.:
Покажите мне хоть один способ, при котором не будет матов, если файл "переедет"! (за исключением способа занесения имени файла в переменную и её дальнейшее использование)

Занесение пути к / в константу и всегда работа только от /. :)

Объясните своё понимание терминов "кодер" и "программист".

Имхо: кодер - человек который бездумно занимается именно кодированием, написанием кода. Программист - мыслит более широко, алгоритмами, структурами, взаимодействием процессов и т.д.

Короче, кодер пишет "лишь бы работало", а программист - "оптимально". ;)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий