PHP Conference Japan 2024

pathinfo

(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)

pathinfoВозвращает информацию о пути к файлу

Описание

pathinfo(string $path, int $flags = PATHINFO_ALL): array|string

Функция pathinfo() возвращает информацию о пути path в виде ассоциативного массива или строки, в зависимости от значения параметра flags.

Замечание:

Подробнее о получении информации о текущем пути рассказывает раздел «Предопределённые зарезервированные переменные».

Замечание:

Функция pathinfo() наивно оперирует входной строкой и не знает фактическую файловую систему или компоненты пути наподобие «..».

Замечание:

Только в системах Windows символ \ будет интерпретироваться как разделитель каталогов. В других системах символ будет рассматриваться как любой другой символ.

Предостережение

Функция pathinfo() учитывает региональные настройки, поэтому для правильного разбора пути, который содержит многобайтовые символы, необходимо функцией setlocale() установить локаль, которая соответствует символам пути.

Список параметров

path

Анализируемый путь.

flags

Параметр, если установили, указывает конкретный элемент пути, который вернёт функция: PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION и PATHINFO_FILENAME.

Если флаг flags не указали, то возвращаются все доступные элементы.

Возвращаемые значения

Если аргумент flags не передали, возвращается ассоциативный массив (array) со следующими элементами: dirname, basename, extension (если есть) и filename.

Замечание:

Если путь path содержит больше одного расширения, флаг PATHINFO_EXTENSION возвращает только последнее, а флаг PATHINFO_FILENAME только удаляет последнее расширение (смотрите первый пример).

Замечание:

Если путь path не содержит расширения, функция не вернёт элемент расширения extension (смотрите второй пример).

Замечание:

Если основное имя basename пути path начинается с точки, следующие символы интерпретируются как расширение файла (extension), а имя файла filename как пустое (смотрите третий пример).

Если флаги flags указали, функция возвращает строку (string), которая содержит запрошенный элемент.

Примеры

Пример #1 Пример использования функции pathinfo()

<?php

$path_parts
= pathinfo('/www/htdocs/inc/lib.inc.php');

echo
$path_parts['dirname'], "\n";
echo
$path_parts['basename'], "\n";
echo
$path_parts['extension'], "\n";
echo
$path_parts['filename'], "\n";

?>

Результат выполнения приведённого примера:

/www/htdocs/inc
lib.inc.php
php
lib.inc

Пример #2 Пример работы функции pathinfo(), который показывает разницу между null и отсутствием расширения

<?php

$path_parts
= pathinfo('/path/emptyextension.');
var_dump($path_parts['extension']);

$path_parts = pathinfo('/path/noextension');
var_dump($path_parts['extension']);

?>

Вывод приведённого примера будет похож на:

string(0) ""

Notice: Undefined index: extension in test.php on line 6
NULL

Пример #3 Пример работы функции pathinfo() для файла, имя которого начинается с точки

<?php

print_r
(pathinfo('/some/path/.test'));

?>

Вывод приведённого примера будет похож на:

Array
(
    [dirname] => /some/path
    [basename] => .test
    [extension] => test
    [filename] =>
)

Пример #4 Пример использования функции pathinfo() с разыменованием массива

Параметр flags — не битовая маска. Разрешается только одно значение. Чтобы выбрать только ограниченный набор значений, которые проанализировала функция, массив деструктурируют следующим образом:

<?php

['basename' => $basename, 'dirname' => $dirname] = pathinfo('/www/htdocs/inc/lib.inc.php');

var_dump($basename, $dirname);

?>

Вывод приведённого примера будет похож на:

string(11) "lib.inc.php"
string(15) "/www/htdocs/inc"

Смотрите также

  • dirname() - Возвращает путь к родительскому каталогу
  • basename() - Возвращает конечный компонент имени пути
  • parse_url() - Разбирает URL-адрес и возвращает компоненты адреса
  • realpath() - Возвращает канонизированный абсолютный путь к файлу

Добавить

Примечания пользователей 3 notes

up
13
Pietro Baricco
12 years ago
Use this function in place of pathinfo to make it work with UTF-8 encoded file names too

<?php
function mb_pathinfo($filepath) {
preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im',$filepath,$m);
if(
$m[1]) $ret['dirname']=$m[1];
if(
$m[2]) $ret['basename']=$m[2];
if(
$m[5]) $ret['extension']=$m[5];
if(
$m[3]) $ret['filename']=$m[3];
return
$ret;
}
?>
up
7
urvi
2 years ago
about the path, there are one thing you should note :
On Windows, both slash (/) and backslash (\) are used as directory separator character. In other environments, it is the forward slash (/). (this explain is from basename() function part https://www.php.net/manual/en/function.basename.php)
example:
<?php
$path
= "https://urvidutta.com /a\b\c\filename.pdf";

echo
pathinfo($pdfUrl, PATHINFO_BASENAME); //get basename
//output
//on window: result is filename.pdf
//on Linux: result is a\b\c\filename.pdf (that is may not your expect)

//so in order to get same result in different system. i will do below first.
$path = str_replace($path, '\\', '/'); //convert '\' to '/'
?>
up
10
n0dalus
19 years ago
If a file has more than one 'file extension' (seperated by periods), the last one will be returned.
For example:
<?php
$pathinfo
= pathinfo('/dir/test.tar.gz');
echo
'Extension: '.$pathinfo['extension'];
?>
will produce:
Extension: gz

and not tar.gz
To Top