@machetero счавобы от текущей директории? По всему include_path-у же. А так ты явно указываешь абсолютный путь (поскольку __DIR__ считается от корня) с небольшой относительной математикой. Тебе от этого профит в том что ты всегда знаешь как у тебя файлы друг по отношению к другу лежат и не накосячишь с инклюдами. Системе должен быть профит на просмотр одной локации вместо списка предположений до первого совпадения.
Если использовать __DIR__ то переименование директории выше не приведет к катастрофическим последствиям. Хотя этого понадобиться никогда не должно, но мало-ли.
Должно-должно. Всяко бывает. Мб что-то глобальное ты переименовывать не будешь, а вот внутри какого-нибудь компонента - запросто. Так что это оч полезная фича.
Подкину ещё одну причину: бывает что скрипты, вызываемые по крону, используют те же модули, что и веб скрипты. А понятие "текущая директория" у них разное. Указание __DIR__ снимает неопределённость. В некоторых системах для тех же целей используют некую константу, которую определяют в точке входа: PHP: define('SITE_ROOT', dirname(__FILE__).'/'); и затем везде PHP: if (!defined('SITE_ROOT')) exit; include SITE_ROOT.'include/common.php'; Тут типа ещё и "защита" от прямого обращения. Сам так не пишу, но встречаю часто.
А если скрипт лежит в одном каталоге, а точка входа находится в нестандартном месте? Что тогда будет с относительными путями, использующими этот ROOT? --- Добавлено --- Я, кстати, присоединюсь - по инклуд-пасу проверка идет разве не уже после того, как оказалось, что в текущей директории нужного файла нет? --- Добавлено --- Вопрос снят, залез в доку: --- Добавлено --- Ну и еще будет полезным: Так что писать, в случае, если надо дернуть соседний файлик, без __DIR__ и обхода инклуд-паса, в общем-то можно.
@Fell-x27 Ну и дом же, не с крыши начинают строить, а с земли. Где фундамент зальём от туда и пляшем. Разве это плохо?) Что точка входа в корне )
Ирония в том, что как раз-таки файл конфига обычно и выносят наружу из проекта. Там закрытая инфа. Если у тебя слетит PHP, ну мало ли что сломается, то сервер начнет плеваться исходниками. Не помогут никакие "защиты от прямого доступа через константы". А в исходнике конфига у тебя явки-пароли для бд и не только.
@Fell-x27 Прошу прощения удалил, пост. Я посчитал его не целесообразным маленько. Просто у меня уже два часа ночи. Один глаз закрыт, мозг отключен, а руки ещё печатают. У меня заголовок From, с сервера приходит почему - то имя пользователя с которого отправляется письмо на сервере, хотя всё через яндекс идёт, а отправлю mail() и указываю заголовки.. Вот не задача. Спать хочу >< --- Добавлено --- Но тут правда. Тогда как быть и как защитить свои константы?
Нет, не плохо, это обычное дело. Но вот у меня, например, платформа, лежащая в одном каталоге, может быть базой для N независимых сайтов. То есть физически один инстанс движка используется несколькими ресурсами. Как трехглавый Змей Горыныч. Голов три, а сердце одно. И вот тут уже нельзя надеяться на то, что точка входа вернет корень при объявлении через dirname или __DIR__. --- Добавлено --- Выложить файл с конфигом на уровень выше, чем твой Public-html, или что там у тебя является корнем в сервере. И прописывать при линковке абсолютный путь до него. Да, народ, если увидит исходники, увидит и этот путь. А постучаться по нему не сможет. Админку тоже выносят за пределы корня очень часто.
Я вот ща задумался. И понял что внатуре если он не в папке веб сервера, то его ни как не получат... Где вы были гуру. Я терь понял соль жизни, но уже поздно. Надо перенастроить по шурику корень папки в движке. И закину точку входа во внутрь, и всё... А всё остальное будет сводится в ней и получается доступ ко всем файлам и папкам на сервере будет сам собой закрыт...
А теперь я напомню о том, что не на всех хостингах так можно делать. Если, конечно, у тебя не VDS. Ну...ессно речь не о локалке.
не забывай, что "текущий" каталог идёт обычно первым в инклюд-пасе. Но если ты директиву перенастроишь - начнется карнавал.
текущий идет первым, это "." в include_path. --- Добавлено --- если её не будет в include_path, то php всё равно попробует найти файл в текущей директории после всех остальных возможностей.
А еще это можно узнать, самому собрав окружение и настроив хосты на сервере. Когда работаешь на каком-нибудь денвере опенсервере или что там в моде нонче, это все для тебя закрытый ящик. Когда соберешь стэк сам, начнешь врубаться, что там да к чему. Начнешь понимать, чем php-fpm отличается от mod_php или почему не надо ставить Апач на фронт. Научишься настраивать удаленный доступ к БД и так далее.