Одной из полезных функций, предоставляемых в 1С-Битрикс для работы с файловой системой сайта, является функция GetDirPath()
. Она позволяет получить каталог, в котором находится файл, по заданному пути к нему.

Описание функции
Функция GetDirPath()
принимает путь к файлу и возвращает путь к каталогу, в котором этот файл расположен.
Сигнатура функции:
string GetDirPath(string path);
Параметры:
path
— путь к файлу, для которого нужно получить каталог. Это строка, которая может быть относительным или абсолютным путем на сервере.
Возвращаемое значение:
Функция возвращает строку, содержащую путь к каталогу файла. Если в пути указан только сам файл (без каталога), будет возвращен корневой каталог.
Принцип работы
Функция анализирует строку пути и находит последний символ /
, после чего возвращает все символы, расположенные до этого индекса. Это и будет путь к каталогу, где находится файл. Если в пути нет символа /
, это означает, что передан путь только к файлу, и функция возвращает /
— корневой каталог.
Примеры использования
Пример 1: Получение каталога файла
Предположим, у нас есть файл с путем /temp1/data/file.php
. Чтобы получить каталог, в котором он находится, можно использовать следующую команду:
<?php
echo GetDirPath("/temp1/data/file.php");
// Вывод: "/temp1/data/"
?>
В этом примере мы передаем путь к файлу file.php
, и функция возвращает путь к его каталогу — /temp1/data/
.
Пример 2: Путь без каталога
Если передан путь, указывающий только на сам файл, например /file.php
, то функция вернет /
, что означает корневой каталог:
<?php
echo GetDirPath("/file.php");
// Вывод: "/"
?>
Пример 3: Путь с дополнительными подкаталогами
Рассмотрим более сложный путь, например /var/www/html/sites/temp1/data/file.php
. Функция вернет каталог, где расположен файл — /var/www/html/sites/temp1/data/
:
<?php
echo GetDirPath("/var/www/html/sites/temp1/data/file.php");
// Вывод: "/var/www/html/sites/temp1/data/"
?>
Пример 4: Пустой путь
Если передан пустой путь, функция также возвращает /
(корневой каталог):
<?php
echo GetDirPath("");
// Вывод: "/"
?>
Реализация функции
Функция GetDirPath()
реализована следующим образом в файле bitrix/modules/main/tools.php
:
function GetDirPath($sPath)
{
if ($sPath <> '') {
$p = mb_strrpos($sPath, "/");
if ($p === false) {
return '/';
} else {
return mb_substr($sPath, 0, $p + 1);
}
} else {
return '/';
}
}
Пояснение к коду:
- Проверка на пустой путь:
Сначала функция проверяет, не является ли путь пустым. Если путь пуст, функция сразу возвращает
/
. - Поиск последнего символа
/
: Функция используетmb_strrpos()
для поиска последнего вхождения символа/
в строке. Это важно, так как нам нужно получить именно путь до последнего каталога. - Возврат пути:
Если символ
/
найден, функция возвращает подстроку от начала пути до символа/
. Это и будет путь к каталогу. Если символ/
не найден, возвращается/
, что означает, что файл находится в корневом каталоге.
Сравнение с аналогичной функцией CMain::GetCurDir
Функция GetCurDir()
из класса CMain
также работает с путями, но ее задача — возвращать текущий путь (каталог) на момент выполнения. В отличие от GetDirPath()
, которая работает с переданными путями, GetCurDir()
всегда возвращает путь, соответствующий текущей директории сайта.
Пример использования CMain::GetCurDir
:
<?php
$curDir = CMain::GetCurDir();
echo $curDir;
// Выводит путь к текущей директории сайта
?>
Когда использовать GetDirPath()
Функция GetDirPath()
полезна в тех случаях, когда нужно работать с абсолютными путями к файлам и необходимо определить, в каком каталоге находится файл. Например, это может быть полезно для построения относительных ссылок, генерации путей для загрузки файлов или логирования информации о файлах.
Заключение
Функция GetDirPath()
— это простой и полезный инструмент для работы с файловой системой в 1С-Битрикс, который позволяет эффективно извлекать каталог файла из его пути. Она значительно упрощает разработку, когда необходимо работать с файловыми путями, и помогает избежать ошибок, связанных с неправильным указанием путей к файлам и каталогам.