[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: $_SERVER
NierRa
Добрый день уважаемые форумчане!

В своих наработках я использую абсолютные пути, а именно через суперглобальный массив $_SERVER['DOCUMENT_ROOT'];

Однако слышал что это плохая практика и некоторые хостинги не воспринимают этот суперглобальный массив.

Для того, чтобы себя подстраховать и убавить себе лишней работы в случае такой неприятной ситуации поступил так:

    define('ROOT_SITE', $_SERVER['DOCUMENT_ROOT']);


Таким образом я всегда могу подправить исходный код, изменив значение на http://mysite.com. (адрес выбран случайно)

Вопрос: что вы посоветуете по данному вопросу?

Теперь вопрос эстетики...

Например мы имеем такую индексную страницу: (код не имеет значения)

    require ROOT_SITE.'/modules/navigation/navi.php';
require ROOT_SITE.'/modules/contacts.php';
require ROOT_SITE.'/tpl/footer.html';


Вроде бы симпатичные адреса. Но саму константу в индексном файле не хочется определять, а подключать бибилиотечный файл в виде

    './modules/navigation/navi.php';


как-то неэстетично.

Вопрос: что вы посоветуете по второму вопросу? (Вопрос личных предпочтений)



Спустя 7 минут, 41 секунда (27.07.2012 - 13:03) AlmazDelDiablo написал(а):
Если index.php находится в корне сайта, то путь к нему будет путем и к корню сайта. Соот-но делаем так:

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

Спустя 6 минут, 7 секунд (27.07.2012 - 13:09) NierRa написал(а):
Спасибо.
Чем отличается использование $_SERVER['DOCUMENT_ROOT']; от dirname(__FILE__);
Имеется ввиду какие подводные камни могут встретится на пути их использования? Т.е какие у них плюсы и минусы между собой и если dirname(__FILE__) лучше, то зачем нужен $_SERVER['DOCUMENT_ROOT'];

Спустя 3 минуты, 33 секунды (27.07.2012 - 13:13) killer8080 написал(а):
Все зависит от используемого sapi. $_SERVER['DOCUMENT_ROOT'] всегда будет работать правильно на апаче с модулем, в режиме командной строки она по определению отсутствует, ввиду отсутствия вебсервера (CLI), в fast-cgi может содержать неверный путь, если у админов руки произрастают из области тазовых костей smile.gif

Если пишите универсальный скрипт, который должен работать в любой среде, или скрипт запускаемый кроном, то лучше отказаться $_SERVER['DOCUMENT_ROOT'] и использовать предопределенные константы __FILE__ (php <5.3) или __DIR__ (php>=5.3), так как в случае с CLI, getcwd() так же может возвращать неверный путь.

Спустя 49 секунд (27.07.2012 - 13:13) AlmazDelDiablo написал(а):
dirname( __FILE__ ) хорош тем, что ему плевать на то, является ли этот каталог на самом деле корневым или нет. Например, у вас сайт лежит не в $_SERVER['DOCUMENT_ROOT'], а в каком-нибудь подкаталоге (http://mysite.com/site1/site2), то $_SERVER['DOCUMENT_ROOT'] вернет путь до mysite.com, а dirname — до того места, где лежит index.php.

Спустя 3 минуты, 49 секунд (27.07.2012 - 13:17) NierRa написал(а):
Благодарю за развернутые ответы

Спустя 3 минуты, 34 секунды (27.07.2012 - 13:21) NierRa написал(а):
Цитата
а dirname — до того места, где лежит index.php.


Как бы глупо это не звучало, но вдруг по какой-либо причине index.php отсутствует и есть только index.html. Что будет в этом случае?

Спустя 2 минуты, 21 секунда (27.07.2012 - 13:23) killer8080 написал(а):
Цитата (NierRa @ 27.07.2012 - 13:21)
и есть только index.html

и причем здесь тогда php?

Спустя 1 минута, 41 секунда (27.07.2012 - 13:25) AlmazDelDiablo написал(а):
Где пропишите dirname( __FILE__ ), до того места и вернет путь. Даже если вы такой извращенец, что занимаетесь добавлением php-кода в .html файлы ^^

Спустя 3 минуты, 56 секунд (27.07.2012 - 13:29) NierRa написал(а):
Цитата
и причем здесь тогда php?


Цитата
Даже если вы такой извращенец, что занимаетесь добавлением php-кода в .html файлы ^^


Я не извращенец biggrin.gif Я на самом деле просто хочу знать как можно больше и зараннее смоделировал подобную ситуацию. Разумеется я не занимаюсь подобным извращением.

Не хочу надоедать но все же:
dirname(__FILE__); преобразуется в путь с \ слешами
$_SERVER['DOCUMENT_ROOT']; преобразуется в путь с / слешами
Чем это обусловлено?

Спустя 8 минут, 9 секунд (27.07.2012 - 13:37) killer8080 написал(а):
Файлы .html по умолчанию сервер отдает в исходном виде, если конечно ты не заставишь через настройки, обрабатывать как скрипты.
Как уже сказали выше эти константы указывают на файл в котором запрошены, это значит например в таком коде
index.php
include './lib/func.php';

./libi/func.php
echo __FILE__;
покажет подключенный файл func.php, а не index.php. Об этом важно помнить при их использовании, и объявлять свою костанту на их основе, в файле лежащем в корне движка

Спустя 2 минуты, 29 секунд (27.07.2012 - 13:39) killer8080 написал(а):
Цитата (NierRa @ 27.07.2012 - 13:29)
Не хочу надоедать но все же:
dirname(__FILE__); преобразуется в путь с \ слешами
$_SERVER['DOCUMENT_ROOT']; преобразуется в путь с / слешами
Чем это обусловлено?

Начина с 5-х версий php на вин платформе можно использовать прямые слеши в путях, как *никс. Чтоб не париться всегда используй *никс стиль - /.


_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
Быстрый ответ:

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