basename

(PHP 4, PHP 5, PHP 7, PHP 8)

basename — Повертає останній компонент рядка шляху

Опис

function basename(string $path, string $suffix = ?): string

При передачі рядка, що містить шлях до файла чи директорії, ця функція повертає останній компонент наданого рядка.

Зауваження:

Можна сказати, що basename() працює умовно зі "шляхами", бо вона фактично не дивиться у файлову систему, та не враховує таких компонентів як "..".

Застереження

basename() враховує налаштування локалі, отже щоб мати коректний результат при роботі з мультибайтними рядками, потрібно встановлювати відповідну локаль використовуючи функцію setlocale().

Параметри

path

Шлях.

На Windows, в якості роздільників директорій використовується як прямий слеш (/) так і зворотній (\). В інших середовищах - це прямий слеш (/).

suffix

Якщо рядок закінчується на suffix, він також буде обрізатись.

Значення, що повертаються

Повертає кінцевий компонент рядка path (шляху).

Приклади

Приклад #1 Використання basename()

<?php
+echo "2) ".basename("/etc/sudoers.d").PHP_EOL;
+echo "3) ".basename("/etc/passwd").PHP_EOL;
+echo "4) ".basename("/etc/").PHP_EOL;
+echo "5) ".basename(".").PHP_EOL;
+echo "6) ".basename("/");
?>

Поданий вище приклад виведе:

1) sudoers
+2) sudoers.d
+3) passwd
+4) etc
+5) .
+6)

Прогляньте також

  • dirname() - Returns a parent directory's path
  • pathinfo() - Returns information about a file path
+add a note

User Contributed Notes 5 notes

up
56
Anonymous
9 years ago
It's a shame, that for a 20 years of development we don't have mb_basename() yet!

// works both in windows and unix
function mb_basename($path) {
    if (preg_match('@^.*[\\\\/]([^\\\\/]+)$@s', $path, $matches)) {
        return $matches[1];
    } else if (preg_match('@^([^\\\\/]+)$@s', $path, $matches)) {
        return $matches[1];
    }
    return '';
}
up
2
bobray at softville dot com
1 year ago
You might expect that echo basename('directory_name/') would return an empty string. Instead, it returns 'directory_name', without the slash.
up
19
(remove) dot nasretdinov at (remove) dot gmail dot com
18 years ago
There is only one variant that works in my case for my Russian UTF-8 letters:

<?php
function mb_basename($file)
{
    return end(explode('/',$file));
}
><

It is intented for UNIX servers
up
10
swedish boy
17 years ago
Here is a quick way of fetching only the filename (without extension) regardless of what suffix the file has.

<?php

// your file
$file = 'image.jpg';

$info = pathinfo($file);
$file_name =  basename($file,'.'.$info['extension']);

echo $file_name; // outputs 'image'

?>
up
-2
KOmaSHOOTER at gmx dot de
21 years ago
If you want the current path where youre file is and not the full path then use this :)

<?php
echo('dir = '.basename (dirname($_SERVER['PHP_SELF']),"/"));    
// retuns the name of current used directory
?>

Example: 

www dir: domain.com/temp/2005/january/t1.php

<?php
echo('dirname <br>'.dirname($_SERVER['PHP_SELF']).'<br><br>');    
// returns: /temp/2005/january
?>

<?php
echo('file = '.basename ($PHP_SELF,".php"));    
// returns: t1
?>

if you combine these two you get this
<?php 
echo('dir = '.basename (dirname($_SERVER['PHP_SELF']),"/"));    
// returns: january
?>

And for the full path use this
<?php 
echo(' PHP_SELF <br>'.$_SERVER['PHP_SELF'].'<br><br>');
// returns: /temp/2005/january/t1.php    
?>