Dirname: примеры (PHP)
dirname(string $path, int $levels = 1): stringФункция dirname() в PHP возвращает родительскую директорию заданного пути. Она используется для извлечения части пути, исключая последний компонент, что удобно при работе с файловыми системами и путями.
- path (string) – обязательный параметр, задающий путь для обработки.
- levels (int) – необязательный параметр, определяющий количество уровней директорий для подъёма вверх. По умолчанию равен 1. Добавлен в PHP 7.0.
<?php
echo dirname('/var/www/html/index.php');
?>/var/www/html
<?php
echo dirname('/var/www/html/index.php', 2);
?>/var/www
<?php
echo dirname('script.php');
echo dirname('/');
?>. /
В PHP существуют другие функции для работы с путями:
- basename() – возвращает конечный компонент пути, противоположность
dirname(). - pathinfo() – возвращает массив с информацией о пути (dirname, basename, extension, filename). Удобна для комплексного разбора пути.
- realpath() – возвращает абсолютный канонизированный путь, убирая символьные ссылки и компоненты вроде '../'.
dirname() предпочтительнее, когда нужно быстро получить родительскую директорию без разбора других компонентов пути.
Функция не добавляет конечный слеш к результату.
<?php
$dir = dirname('/var/www/html/');
echo $dir === '/var/www' ? 'true' : 'false';
?>true
Если уровней больше, чем компонентов пути, возвращается '.' или '/' в зависимости от платформы.
<?php
echo dirname('/usr/bin', 5);
?>.
В PHP 7.0 добавлен необязательный второй аргумент levels, позволяющий подняться на несколько уровней вверх за один вызов. В PHP 8.0 изменений в поведении функции не было.
<?php
// В файле /var/www/project/include/config.php
echo dirname(__FILE__);
?>/var/www/project/include
<?php
$path = 'images/avatars/user.jpg';
$uploadDir = dirname($path) . '/processed/';
echo $uploadDir;
?>images/avatars/processed/
<?php
echo dirname('C:\\Windows\\System32\\cmd.exe');
?>C:\Windows\System32
<?php
$absolute = dirname(realpath('index.php'));
echo $absolute;
?>/home/user/public_html
<?php
function createParentDirs($filePath) {
$dir = dirname($filePath);
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}
}
createParentDirs('cache/2024/05/10/data.json');
echo 'Директории созданы';
?>Директории созданы
Dirname в Python
Модуль os.path содержит функцию dirname(), аналогичную PHP. Также есть Path.parent в модуле pathlib.
from os.path import dirname
print(dirname('/var/www/html/index.php'))/var/www/html
В Node.js используется модуль path и метод dirname().
const path = require('path');
console.log(path.dirname('/var/www/html/index.js'));/var/www/html
Dirname в MySQL
Функция SUBSTRING_INDEX() может использоваться для эмуляции, но стандартной функции нет.
SELECT SUBSTRING_INDEX('/var/www/html/index.php', '/', -2);html/index.php