Относительные пути...

kombat

Новичок
Относительные пути...

Есть 4 файла:

1.php (абсолютный путь: $_SERVER['DOCUMENT_ROOT']/test)
2.php (абсолютный путь: $_SERVER['DOCUMENT_ROOT']/test/2)
3.php (абсолютный путь: $_SERVER['DOCUMENT_ROOT']/test/3)
4.php (абсолютный путь: $_SERVER['DOCUMENT_ROOT']/test/444/4)

Оцените, пожалуйста, способ задания относительных путей.

1.php подключает 2.php:
PHP:
$rootdir = "./";
require("2/2.php");
2.php подключает 3.php:
PHP:
require($rootdir."3/3.php"); // фишка в том, что $rootdir инициализируется в подключаюЩЕМ файле
и 4.php подключает 2.php:
PHP:
$rootdir = "./../../";
require("./../../2/2.php");
В принципе, как мне кажется, хорошая альтернатива абсолютным путям.
Скажите, такой способ используется вообще? Не имеет ли он подводных камней?
 

SiMM

Новичок
1.
PHP:
define('ROOT',dirname(__FILE__));
require ROOT.'/2/2.php'; # 1.php
require ROOT.'/3/3.php'; # 2.php
2.
PHP:
define('ROOT',dirname(__FILE__).'/../..');
require ROOT.'/444/4/4.php'; # 4.php
 

kombat

Новичок
SiMM, спасибо. я правильно понял, то что вы написали по сути тоже самое?

вы не ошиблись?
PHP:
require ROOT.'/444/4/4.php'; # 4.php
видимо вместо '/444/4/4.php' имель ввиду /2/2.php
 

kombat

Новичок
Автор оригинала: dimagolov
kombat, напиши абсолютные пути, не нужно фигней страдать
Ну не знаю.. мне кажется так красивее. Да и к тому же, если все скрипты находятся не в DOCUMENT_ROOT, а в DOCUMENT_ROOT/папка, причем необходимо предусмотреть возможность переноса всего приложения в другую папку, то все равно придется использовать относительные пути хотя бы для того, чтобы цеплять файл с переменной в которой хранится название этой папки.. или я что-то не понимаю?
 

cDLEON

Онанист РНРСlub
PHP:
<?
#1.php
DEFINE("ROOT",dirname(__FILE__));
include(ROOT."/dir/2.php");
?>
PHP:
<?
#/dir/2.php
DEFINE("ROOT_2",dirname(__FILE__));
include(ROOT_2."/dir3/3.php");
?>
PHP:
<?
#/dir/dir3/3.php
echo "ТЕПЕРЬ МЛИН ПОНЯТНО???";
?>
 

dimagolov

Новичок
Автор оригинала: kombat
Ну не знаю.. мне кажется так красивее. Да и к тому же, если все скрипты находятся не в DOCUMENT_ROOT, а в DOCUMENT_ROOT/папка, причем необходимо предусмотреть возможность переноса всего приложения в другую папку, то все равно придется использовать относительные пути хотя бы для того, чтобы цеплять файл с переменной в которой хранится название этой папки.. или я что-то не понимаю?
вот поэтому нужно иметь абсолютный путь к проекту, а от него подключать отдельные модули по путям от корня проекта. тогда при переносе всего проекта или использовании его части достаточно будет поменять главный путь, а не думать как поменялось взаимное расположение разных модулей и как при этом поменялись относительные пути.
 

kombat

Новичок
Автор оригинала: cDLEON
PHP:
<?
#1.php
DEFINE("ROOT",dirname(__FILE__));
include(ROOT."/dir/2.php");
?>
PHP:
<?
#/dir/2.php
DEFINE("ROOT_2",dirname(__FILE__));
include(ROOT_2."/dir3/3.php");
?>
PHP:
<?
#/dir/dir3/3.php
echo "ТЕПЕРЬ МЛИН ПОНЯТНО???";
?>
ну код мне понятен, а что вы хотите сказать - нет. Объясните, плиз, словами а не кодом..

если заинклудить #/dir/2.php в #/dir4/4.php, то #/dir/dir3/3.php не подключится.. а в моем случае подключится.

-~{}~ 09.08.07 01:33:

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

HraKK

Мудак
Команда форума
Пути должны быть абсолютными всегда.

И не советую обсуждать.
 

kombat

Новичок
Автор оригинала: HraKK
Пути должны быть абсолютными всегда.

И не советую обсуждать.
А как быть если проект лежит в DOCUMENT_ROOT/папка? Я так понимаю в каком-то файле будет хранится название этой папки и это файл должен как-то инклудиться во все остальные файлы... но, для того чтобы его заинклудить надо знать название этой папки.. замкнутый круг какой-то
 

cDLEON

Онанист РНРСlub
kombat
если заинклудить #/dir/2.php в #/dir4/4.php, то #/dir/dir3/3.php не подключится.. а в моем случае подключится.
А вы то сами пробовали мой пример выполнить?
Ну раз вы не уважаете моё время, которое я трачу на вас, то и я не буду уважать вас.
Разбирайтесь сами.
 

kombat

Новичок
Автор оригинала: cDLEON
kombat

А вы то сами пробовали мой пример выполнить?
Ну раз вы не уважаете моё время, которое я трачу на вас, то и я не буду уважать вас.
Разбирайтесь сами.
Да при чем тут ваш пример-то??? он понятное дело не будет работать т.к. пути будут относительно подклюЧЕННЫХ файлов. в моем же случае переменная $rootdir задается в подклюЧАЮЩЕМ файле и для все подклюЧЕННЫХ эта переменная будет содержать путь к корню проекта относительно подклюЧАЮЩЕГО файла!

Люди, кто-нибудь может мне словами объяснить в чем могут заключаться подводные камни если использовать относительные пути так как я описал в первом сообщении?
 

kombat

Новичок
Автор оригинала: HraKK
kombat
Читай мой пост.
понял.. спасибо. но хотелось бы все-таки услышать мнения о том методе который я описал (именно методе, а не на счет относительных путей вообще)
 

cDLEON

Онанист РНРСlub
kombat
Вы играете на моих нервах.
Вы попробуйте ЗАИНКЛУДИТЬ из /dir4/4.php /dir/2.php и проверить, заинклудится ли /dir/dir3/3.php.
Это к тому ответу.
А потом, в добавок, попытайтесь запустить СВОЙ пример из крона. Так же я посоветую вам, купить геморойные
 

kombat

Новичок
заинклудится, если использовать мой метод, а не ваш:

/dir4/4.php:
PHP:
<?php
$rootdir = "./../"; // путь к корню проекта
require($rootdir."dir/2.php");
?>
/dir/2.php:
PHP:
<?php
//обратите внимание, в этом файле $rootdir не объявляется. он инициализируется в /dir4/4.php (или в /1.php)
require($rootdir."dir/dir3/3.php"); // путь будет от корня проекта
?>
все работает даже если инклудить из /1.php:
PHP:
<?php
$rootdir = "./"; // корень
require($rootdir."dir/2.php");
?>
cDLEON, надеюсь на этот раз понятно? ;)
 

cDLEON

Онанист РНРСlub
Мля...Я сейчас матюкаться начну.
Скинь мне пожалуйсто переделанный и попробыванный мой код.
 
Сверху