Как получить имя директории из пути в PHP

Раздел: Разработка на PHP -> Работа с файловой системой в PHP

Работа с именем директории в PHP

В PHP существует несколько способов получить имя директории из пути к файлу. Наиболее распространённым и эффективным является использование функции dirname(). Она возвращает родительский каталог. Рассмотрим различные подходы.

Как получить имя директории из пути с помощью функции dirname?

Функция dirname() принимает строку пути и возвращает путь к родительской директории. По умолчанию она не добавляет слеш в конце, но можно указать уровень вложенности (начиная с PHP 7.0.0).

<?php
$path = '/var/www/html/index.php';
$dir = dirname($path);
echo $dir; // /var/www/html
?>

Php site dir (директория сайта в php)

/var/www/html

Php include dir (подключение директории в php)

Вторым параметром можно указать количество уровней вверх:

<?php
$path = '/var/www/html/index.php';
$parent = dirname($path, 2);
echo $parent; // /var/www
?>

Php dir name (имя директории в php)

/var/www

Php get dir (получение директории в php)

Типичная ошибка: если путь не содержит слешей, dirname() возвращает точку (текущая директория). Например, dirname('file.txt') вернёт '.'.

Как извлечь имя директории с помощью pathinfo?

Функция pathinfo() возвращает ассоциативный массив с частями пути. Ключ dirname содержит имя директории.

<?php
$path = '/var/www/html/index.php';
$info = pathinfo($path);
echo $info['dirname']; // /var/www/html
?>

Dirs php id (каталоги по id в php)

/var/www/html

Также можно указать второй параметр для получения только одной части: pathinfo($path, PATHINFO_DIRNAME).

Проблема: pathinfo() работает медленнее, чем dirname(), так как разбирает весь путь.

Как получить директорию текущего скрипта с помощью __DIR__?

Магическая константа __DIR__ возвращает абсолютный путь к директории, в которой находится выполняемый скрипт. Это удобно для подключения файлов.

<?php
echo __DIR__; // /var/www/html
?>
/var/www/html

Если нужно подняться выше, можно объединить с dirname():

<?php
$parent = dirname(__DIR__);
echo $parent; // /var/www
?>

Ошибка: __DIR__ возвращает путь без завершающего слеша. Не следует добавлять слеш вручную, так как это может привести к некорректным путям.

Как получить имя директории с помощью basename и строковых операций?

Функция basename() возвращает последний компонент пути. Для получения имени последней директории можно использовать комбинацию с dirname().

<?php
$path = '/var/www/html/index.php';
$dirName = basename(dirname($path)); // 'html'
echo $dirName;
?>
html

Это полезно, когда нужно только имя последней папки, а не полный путь.

Проблема: если путь заканчивается слешем или является корневым, результат может быть неожиданным.

Расширенные примеры и сценарии использования

Использование dirname с символическими ссылками

Пример
<?php
// Предположим, /var/www/link -> /home/user/project
$symlink = '/var/www/link/script.php';
$dir = dirname($symlink);
echo $dir; // /var/www/link
// Чтобы получить реальный путь директории, используйте realpath() в комбинации с dirname()
$realDir = dirname(realpath($symlink));
echo $realDir; // /home/user/project
?>
/var/www/link
/home/user/project

При работе с символическими ссылками dirname() возвращает путь, указанный в ссылке. Для получения реального физического пути следует применять realpath().

Обработка путей с точками и точками-точками

Пример
<?php
$path = '/var/www/../etc/passwd';
$dir = dirname($path);
echo $dir; // /var/www/../etc
// Для нормализации пути используйте realpath()
$normalizedDir = dirname(realpath($path));
echo $normalizedDir; // /etc
?>
/var/www/../etc
/etc

dirname() не разрешает относительные компоненты. Нормализация выполняется с помощью realpath().

Получение имени директории из URL

Пример
<?php
$url = 'http://example.com/images/photo.jpg';
$parsed = parse_url($url);
$path = $parsed['path']; // /images/photo.jpg
$dir = dirname($path);
echo $dir; // /images
?>
/images

Для URL следует сначала извлечь путь, затем применить dirname().

Работа с Windows-путями

Пример
<?php
$path = 'C:\\Users\\Admin\\Documents\\file.txt';
$dir = dirname($path);
echo $dir; // C:\\Users\\Admin\\Documents
// Внимание: обратный слеш нужно экранировать в строках с двойными кавычками
// На практике часто используют DIRECTORY_SEPARATOR
echo DIRECTORY_SEPARATOR; // \\ на Windows, / на Linux
?>
C:\Users\Admin\Documents
\

Функция dirname() корректно работает с обратными слешами на Windows. Однако для кроссплатформенности рекомендуется использовать константу DIRECTORY_SEPARATOR.

Динамическое вычисление пути к конфигурационным файлам

Пример
<?php
// Файл конфигурации лежит на один уровень выше от текущего скрипта
$configPath = dirname(__DIR__) . '/config/app.ini';
if (file_exists($configPath)) {
    $config = parse_ini_file($configPath);
}
?>

Этот паттерн часто используется в MVC-фреймворках для организации структуры папок.

Получение списка файлов в родительской директории

Пример
<?php
$currentDir = __DIR__;
$parentDir = dirname($currentDir);
$files = scandir($parentDir);
print_r($files);
?>
Array
(
    [0] => .
    [1] => ..
    [2] => another_folder
    [3] => index.php
)

Работа с относительными путями

Пример
<?php
$relPath = 'subdir/../file.txt';
$dir = dirname($relPath);
echo $dir; // subdir/..
// При использовании с реальными файлами лучше преобразовать в абсолютный
$absoluteDir = dirname(realpath($relPath));
echo $absoluteDir; // /current/working/dir
?>

Имя директории в PHP - comments

En
Php dir name (php)