В языке PHP есть несколько полезных констант, которые мы можем применять в построении динамического пути к файлу или папке.
Как в PHP узнать полный путь к файлу или папке
Для начала приведу примеры, что вы получите вызвав соответствующие константы:
echo __FILE__; // /home/bitrix/www/bitrix/modules/main/admin/php_command_line.php echo __DIR__; // /home/bitrix/www/bitrix/modules/main/admin
Мы рассмотрели 2 константы, __FILE__ и __DIR__ для отображения полного пути к текущему файлу и папке (директории). Стоит отметить, что __DIR__ эквивалентен вызову:
echo dirname(__FILE__); // /home/bitrix/www/bitrix/modules/main/admin
dirname — это стандартная функция PHP, которая возвращает родительский каталог. Она применяется как раз для таких ситуаций, когда вам нужно узнать полный путь к файлу без самого файла :). Мне на ум пришла идея, как можно добиться такого же результата (не удивлюсь, если под капотом тоже самое):
echo str_replace(__FILE__, '',__DIR__); // /home/bitrix/www/bitrix/modules/main/admin
Что мы еще можем применить для константы __FILE__? Конечно же отделить путь и получить просто имя файла:
echo basename(__FILE__); // php_command_line.php
basename — функция возвращает последний элемент из пути, который, как правило, и является именем файла. Раз уж мы решили писать функции заменители, давайте рассмотрим наш URL, как массив, разделенный слешами («/»):
$arPath = explode('/', __FILE__); // Array ( [0] => [1] => home [2] => bitrix [3] => www [4] => bitrix // [5] => modules [6] => main [7] => admin [8] => php_command_line.php
Как видим, последний элемент массива является нашим файлом. Чтобы получить последний элемент массива, не зная его количество, пишем:
$arPath = explode('/', __FILE__); echo $arPath[count($arPath)-1];
Минус 1 потому как отсчет для массивов идет с нуля, но при счете всегда стартует с единицы.
Важно — в некоторых указаниях полного пути вы используете разделители (вышеупомянутые слеши ‘/’). Но, для Windows это «\», для Linux и остальных — «/». Есть такая константа:
echo DIRECTORY_SEPARATOR; // "/"
Вернет 1 слеш (без кавычек).
Немного закрепим 2 функции, о которых шла речь выше:
str_replace — функция, которая используется для замены в строке. Первый параметр «что ищем», затем «на что меняем» и последний «где ищем», в который мы и передали нашу полную строку.
explode — функция, которая делает из строки массив. Но, чтобы функции понять как разбить строку — ей нужно передать «разделитель», а уже вторым параметром — саму строку.
Как вы заметили, «/home/bitrix/www» — это путь на самом сервере, который можно «вырезать» как раз при помощи str_replace.
Если вам нужно использовать «текущий домен», то получить его при помощи PHP можно несколькими способами. Один из них:
echo $_SERVER['SERVER_NAME']; // site.com.ua
Надеюсь вам эта тема была интересна. Пишите в комментариях как вам формат, и нужен ли он вообще. А то в последнее время только битрикс да битрикс :).
Спасибо, за пост. Мне отлично помог. Кратко и очень понятно. Сохранил себе как годноту ))