ProfiPHPProfiPHP
Категория: Полезное в PHP

Реальный путь к каталогу в Linux и Windows

К созданию данной темы привел случай, когда нужно было настроить правильную работу скрипта независимо от его местоположения (вложенность в директории).

Реальный путь к корневому каталогу в Linux и Windows определяется следующим выражением:
str_replace( "\\", "/", realpath( dirname( __FILE__ ) ) )
Разберем его подробно. Для начала возьмем конструкцию "dirname(__FILE__)". Функция Dirname возвращает имя каталога по указанному пути, и задается с помощью волшебной константы "__FILE__ ", которая указывает полный путь и имя текущего файла с развернутыми симлинками.

Данную конструкцию можно заменить "__DIR__", что является эквивалентом вызова "dirname(__FILE__)". Если вы используете данную конструкцию для себя, и контролируете версию PHP, то это оправданная замена, но если пишете скрипт для многих пользователей, то возможна ситуация, их версия модуля PHP будет ниже 5.3.0, что вызовет ошибку, ведь константа "__DIR__" добавлена исключительно в данной версии. Так что "dirname(__FILE__)" подходит как наиболее универсальный метод определения директории файла.

Двигаемся дальше. Рассмотрим функцию Realpath, которая возвращает канонизированый абсолютный путь к файлу. Результат функция Realpath не содержит символических ссылок, переходы типа '/./', '/../' и лишние символы '/' в пути Path, возвращая канонизированный абсолютный путь к файлу.

Функция Realpath используется с той причины, что волшебная константа "__FILE__" в некоторых случаях может содержать относительный путь, и его необходимо перевести в абсолютный.

Из данного определения понятно, что необходимо использовать конструкцию:
realpath( dirname( __FILE__ ) )
Последняя функция в данном выражении является функция Str_replace. Если вы пользуетесь сервером на базе операционной системы Linux, то выражение "str_replace( '\\', '/'" вам не понадобится, ведь он служит для замены обратного слэша в Windows путях.

Итак, приведем итоги к выше описанной темы. Если вам необходимо определить реальный путь к каталогу в Linux и Windows, необходимо использовать описанное выше выражение, которое:

- получает полный путь и имя текущего файла;

- возвращает имя каталога по указанному пути;

- возвращает канонизирован абсолютный путь;

- обрабатывает путь правильными слэшем.

И напоследок необходимо написать, что правильно будет задавать путь к корневой директории константой:
define( 'ROOT_PATH', str_replace( "\\", "/", realpath( dirname( __FILE__ ) ) ) );

Добавить комментарий

Имя:
Текст комментария: