PHP Текущее местоположение скрипта, папки, имя файла
В языке 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 и остальных — «/». Есть такая константа:
Вернет 1 слеш (без кавычек).
Немного закрепим 2 функции, о которых шла речь выше:
str_replace – функция, которая используется для замены в строке. Первый параметр “что ищем”, затем “на что меняем” и последний “где ищем”, в который мы и передали нашу полную строку.
explode – функция, которая делает из строки массив. Но, чтобы функции понять как разбить строку – ей нужно передать “разделитель”, а уже вторым параметром – саму строку.
Как вы заметили, “/home/bitrix/www” – это путь на самом сервере, который можно “вырезать” как раз при помощи str_replace.
Если вам нужно использовать “текущий домен”, то получить его при помощи PHP можно несколькими способами. Один из них:
echo $_SERVER['SERVER_NAME']; // site.com.ua
Надеюсь вам эта тема была интересна. Пишите в комментариях как вам формат, и нужен ли он вообще. А то в последнее время только битрикс да битрикс :).
Как узнать название папки в которой лежит php файл?
У меня проблема, нужно сделать так чтобы php выводил в переменную название папки в которой он находиться. Пробывал команду __DIR__ но она выводить полный путь к папке, а мне нужно только название папки. Информации в гугле не нашёл. Заранее спасибо)
Спасибо, но мне нужно только название последней папки а не всего пути к ней. Или я что-то в этом тебе не понял?
ну вот так и надо писать.
потому что «название папки» может означать и полный путь и последнюю апку.
и ни то ни другое к лежащему в папке файлу отношения не имеет
ну так что написал, то и получил
на будущее думай, что спрашиваешь
тогда и гугль тебе сразу даст ответ на вопрос
FanatPHP, В гугле я написал правильно, и что он предложил полностью домен написать, а мне нужна только последняя папка. Да и вообще я уже вопрос исправил и уже дали ответ, только проверить надо.
Тебе не кажется что у тебя с логикой проблемы?
Если тебе гугль дал неверный ответ, значит ты задал неверный вопрос.
Поэтому не надо блеять что » гугле я написал правильно».
Написал бы «пхп получить последнюю папку», и получил бы ответ на свой вопрос
FanatPHP, не ну знаешь если ты уже до такого дошёл. Если ты умеешь хорошо гуглить, и ник у тебя говорит что ты “фанат php”, то почему ты не мог как некоторые на этом форуме, найти в гугле и ответ прислать. (а не оскорблять тут)
Не наоборот четко. Зачем же ты тут из себя самово умного делаешь? Я ответ получил и все. А ты тут продолжаешь изо каких-то слов не о чём говорить. Я же правильно суть изложил и получил правильный ответ! И не надо тут обзываться. И это не я позорюсь, ясно же на мойом акаунте написано, я в первую очередь верстальщик а уже потом чючють программист, вот и спросил у людей которые лучше об этом знают. Мы уже 2 часа выясняем непонятно что! Этот вопрос был правильно изложен, и я получил ответ. А мы тут не по сути говорим!