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

BMW

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

В FAQ написано:
"file.php (фал лежит в той же папке)
./file.php (фал лежит в той же папке. такая запись иногда требуется в некоторых юникс системах)
images/picture.jpg (файл лежит в капке images, которая находится в текущей)
../file.php (файл лежит в папке, которая расположена на один уровень выше от текущей)
../../file.php (файл лежит в папке, которая расположена на два уровня выше от текущей)"

Почему если в таком виде я указываю файл, то он не находится, а если вместо двух точек ставлю одну, то все ок? Т.е. require_once("./f2/fns2.php") -работает, а require_once("../f2/fns2.php") - нет (выдает ошибку Failed opening required '../f2/fns2.php' ).
И как вообще лучше указывать пути в инклюдах и реквайрах?
Заранее благодарен.

На winXP стоит Apache2.0.45 и PHP5.0.2 (локальный комп)
 

BMW

Guest
Прочитал еще раз, вроде делаю как там и написано. Извиняюсь, если туплю, но почему не работает "require_once("../f2/fns2.php")" Реквайр происходит в файле каталога f1? который как и f2 находится в корне.
 

Sergikus

Guest
Для задания относительных путей в php можно использовать последовательности './' или '../' или не указывать вовсе.

Пример:
<code>
include('./classes/test.php');
include('../content/classes/test.php');
include('classes/test.php');
</code>

Первые два варианта работают относительно текущей директории, в которую обращается пользователь.

Последний сначала ищет относительно текущей директории, в которую обращается пользователь, при условии, что в php.ini ручками не удалили ".;" или ".:" из include_path,
если не находит, то ищет относительно директории, в которой выполняется текущий системный скрипт(заинклуженный).
 

Фанат

oncle terrible
Команда форума
Т.е. require_once("./f2/fns2.php") -работает,
Это значит, что ф2 лежит в той же папке, в которой ты вызываешь этот код
НЕУЖЕЛИ НЕПОНЯТНО НАПИСАНО?
./file.php (фал лежит в той же папке
смысл какого слова тебе непонятен?
 

BMW

Guest
Автор оригинала: Sergikus
Для задания относительных путей в php можно использовать последовательности './' или '../' или не указывать вовсе.

Пример:
<code>
include('./classes/test.php');
include('../content/classes/test.php');
include('classes/test.php');
</code>

Первые два варианта работают относительно текущей директории, в которую обращается пользователь.

Последний сначала ищет относительно текущей директории, в которую обращается пользователь, при условии, что в php.ini ручками не удалили ".;" или ".:" из include_path,
если не находит, то ищет относительно директории, в которой выполняется текущий системный скрипт(заинклуженный).
Спасибо за ответ. Просто разбираю программку. А почему может не реагировать на две точки, только на одну? Это где-то настраивается? Не хочется переписывать все инклюды в программе.
И еще, чтобы понять про последний вариант. Имеем в корне test.php, имеем там же директорию content, в ней file.php. В file.php делаем
<code>
include('test.php');
</code>
Скрипт ищет его в папке content. Так? А в программе, которую смотрю предполагается что test.php который в корне успешно инклюдится.
Ище раз прошу прощения.
 

Фанат

oncle terrible
Команда форума
Последний сначала ищет относительно текущей директории, в которую обращается пользователь, при условии, что в php.ini ручками не удалили ".;" или ".:" из include_path,
если не находит, то ищет относительно директории, в которой выполняется текущий системный скрипт(заинклуженный).
это ты сам придумал, или подсказал кто?
 

Фанат

oncle terrible
Команда форума
ну-ка, юныое дарование, расскажи-ка дядям чем отличается "текущая директория" от "директории, в которой выполняется текущий системный скрипт"
 

BMW

Guest
Автор оригинала: Фанат
Это значит, что ф2 лежит в той же папке, в которой ты вызываешь этот код
НЕУЖЕЛИ НЕПОНЯТНО НАПИСАНО?

смысл какого слова тебе непонятен?
Все, догнал. Извиняйте ребята. Представляю, как вас напрягают подобные вопросы.
 

BMW

Guest
Автор оригинала: WMix
так!!

он инклудиться? или нет?
всеже правильно include('../test.php');
Не инклюдился, потому что в php.ini у меня было удалено ".;" из include_path. Теперь все ОК.

Все спасибо!
 

Фанат

oncle terrible
Команда форума
Не инклюдился, потому что в php.ini у меня было удалено ".;" из include_path. Теперь все ОК.
не надо бредить.
не инклюдится из-за органических повреждений головоного мозга, а не из-за идиотских правок в пхп ини
 

Sergikus

Guest
Автор оригинала: Фанат
ну-ка, юныое дарование, расскажи-ка дядям чем отличается "текущая директория" от "директории, в которой выполняется текущий системный скрипт"
например
/index.php(скрипт к которому обращается пользователь и в нем include(/classes/engine.php) )
/classes/engine.php - так вот директория, в которой выполняется текущий системный скрипт /classes/
а пользователь обращается к директории /
 

Фанат

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

Sergikus

Guest
Автор оригинала: Фанат
ух ты.
как интересно.
пользователь, значит, обращается прямо к директории /
скромненько так. к корневому каталогу диска сервера.
это не пользователь. это супермен какой-то
Не начинай, ты прекрасно понял о чем я говорю. Он обращается к корневому каталогу своего фтп. Если ты хочешь указать мне на ошибку так укажи. Скажи как нужно правильно.
А если ты сам не знаешь, тогда не нужно превращать тему в непонятно, что. Тем более, что человек уже решил свою проблему.
 

Фанат

oncle terrible
Команда форума
ошибка твоя в том, что ты считаешь, будто бывает две текущих директории.
в то время, как она очевидно ОДНА.
 
Сверху