[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Относительные пути в PHP. Их отличия
Страницы: 1, 2
inpost
Всем привет. Простой вопрос, в чём отличие между
'file.php'
'./file.php'
'/file.php'
И в каком случае какой применяется?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
volter9
inpost
'file.php' – это file.php в папке в которой вызван был скрипт (т.е. не только в точке входа, но и еще в подключенных файлах точки входа).
'./file.php' – это file.php в папке в которой начался скрипт (в точке входа).
'/file.php' – это file.php который лежит в корне системе.

Пример. Есть данная структура:

index.php
dir/
----file.php
----another.php
----third.php
file.php

index.php подключает 'file.php' и 'dir/file.php' (тут первый вариант, относительно папки скрипта). 'dir/file.php' подключает 'another.php' (через первый вариант) и './dir/another.php' (относительно точки входа).

Код:
// index.php

require 'dir/file.php';
require 'file.php';

// file.php

echo "Hello, I'm from file.php";

// dir/file.php

require 'another.php';
require './dir/third.php';

echo "I'm from file.php in dir directory\n";

// dir/another.php

echo "I'm another.php\n";

// dir/third.php

echo "I'm third.php file\n";


Вывод:

I'm another.php
I'm third.php file
I'm from file.php in dir directory
Hello, I'm from file.php


Так то в PHP и это умудрились сделать через жопу неправильно. Нормально (типа node.js) './' это относительно данного скрипта. Надеюсь доступно объяснил :)

_____________
Мой блог
inpost
volter9
/file.php. Что в твоём понимании корень системы? У меня не работает. Создаём папку "1" в корне. В папке 1 пишем include '/file.php'; В корне лежит file.php , он не подключается.
file.php - в котором вызван скрипт? В чём отличие от точки входа? У меня работает абсолютно одинаково с './'.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
volter9
inpost
'/file.php' это типа как в *nix системах, есть корень системы, если у Вас винда, то это не должно работать (попробуйте 'C:\file.php', С или другой диск).

В точке входа 'file.php' и './file.php' будет работать одинаково. Но если подключить другой скрипт (скажем в папке directory), то './file.php' это будет 'file.php' а 'file.php' это будет 'directory/file.php'.

_____________
Мой блог
sergeiss
Я уже давно не парюсь с этими путями. А просто сразу же прописываю константу, описывающую путь от корня диска до нужного места. Называю ее, например, BASE_SUB_DIR, располагаю в конфигурационном файле, который всегда подключается. А при инклуде что-нибудь типа
include BASE_SUB_DIR.'/files/file.php';

И пофиг, откуда подключаю, из скрипта какой вложенности. Я уверен, что файл подинклудится корректно, хоть я из "корневого" скрипта работаю, хоть из какого-то "глубинного".

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
inpost
volter9
Сервер Linux.
Покажи пример отличия между 'file.php' и './file.php' в следующем файле:
site.ru/1/test.php
include './2/test2.php'; // расположение site.ru/1/2/test2.php

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
inpost
sergeiss
Как ты формируешь BASE_SUB_DIR ? DOCUMENT_ROOT ? Или связку с __FILE__ ?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
volter9
Цитата (inpost @ 14.01.2015 - 01:08)
Покажи пример отличия между 'file.php' и './file.php' в следующем файле:
site.ru/1/test.php
include './2/test2.php'; // расположение site.ru/1/2/test2.php


'./2/test2.php' = site.ru/2/test2.php
'2/test2.php' = site.ru/1/2/test2.php

Вот пример с '/file.php':

Мой скрипт лежит в '/Users/Volter/Desktop/test/index.php':

require '/file.php';


И файл 'file.php' в корне системы, т.е. '/file.php' будет вызван.

Цитата
Как ты формируешь BASE_SUB_DIR ? DOCUMENT_ROOT ? Или связку с __FILE__ ?


Свернутый текст
Можно так:
// index.php

// или __DIR__ вместо dirname(__FILE__) в новых версиях

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

require ROOT_PATH . '/dir/test.php';

// dir/test.php

require ROOT_PATH . '/dir/dir2/test.php';

// dir/dir2/test.php

echo 'Hello!';


_____________
Мой блог
inpost
volter9
У меня оба варианта подключают "site.ru/1/2/test2.php".

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
volter9
inpost
Может быть у меня наблюдается особенность OS X?

_____________
Мой блог
inpost
volter9
У тебя? Если бы я знал, я бы не спрашивал smile.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
sergeiss
Цитата (inpost @ 14.01.2015 - 01:10)
Как ты формируешь BASE_SUB_DIR ? DOCUMENT_ROOT ? Или связку с __FILE__ ?

Жестко прописываю для определенного сервера. И прекрасно работает: как у меня на компе под Виндой, так и потом на сервере под юниксом. Надо только прописать это один раз и больше проблем нет.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
volter9
Цитата (sergeiss @ 14.01.2015 - 01:49)
Цитата (inpost @ 14.01.2015 - 01:10)
Как ты формируешь BASE_SUB_DIR ? DOCUMENT_ROOT ? Или связку с __FILE__ ?

Жестко прописываю для определенного сервера. И прекрасно работает: как у меня на компе под Виндой, так и потом на сервере под юниксом. Надо только прописать это один раз и больше проблем нет.

А еще лушче использовать define('DS', DIRECTORY_SEPARATOR); вместо '/' (а то разные системы могут по разному реагировать на жестко закодированные '/' и '\'). rolleyes.gif

Там еще в user notes такая классная функция есть: http://php.net/manual/ru/dir.constants.php#114579

_____________
Мой блог
Игорь_Vasinsky
Цитата
А еще лушче использовать define('DS', DIRECTORY_SEPARATOR);

а ещё лучше - это без разницы уже как года 3.

./file.php - файл в корне

/file.php как и file.php - равносильно __DIR__."/".file.php - т.е. директория из которой вызван скрипт



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
inpost
Игорь_Vasinsky
"./file.php - файл в корне"
Тоже не верно. Из папки 1 он будет обращаться к файлу, лежащему в той же папке.

"/file.php как и file.php"
Тоже не верно. находясь в папке 1 первый вариант не загрузит file.php из той же папки.

_________________________

Вот я об этом же и говорю. Какая-то путаница возникает. Ладно если / воспринимать как корень веб-сервера, то вот разница между './' и просто 'name.php' мне не понять. Может это как-то связано с 'include path' ?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.