pathinfo
(PHP 4 >= 4.0.3, PHP 5, PHP 7)
pathinfo — Возвращает информацию о пути к файлу
Описание
$path
[, int $options
= PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME
] )
pathinfo() возвращает информацию о
path
в виде ассоциативного массива или
строки в зависимости от options
.
Список параметров
-
path
-
Анализируемый путь.
-
options
-
Если указан, то задает для возврата отдельный элемент: один из следующих
PATHINFO_DIRNAME
,PATHINFO_BASENAME
,PATHINFO_EXTENSION
иPATHINFO_FILENAME
.Если
options
не указан, то возвращаются все доступные элементы.
Возвращаемые значения
Если параметр options
не передан, то
возвращаемый ассоциативный массив (array)
будет содержать следующие элементы:
dirname, basename,
extension (если есть) и filename.
Замечание:
Если
path
содержит больше одного расширения, тоPATHINFO_EXTENSION
возвращает только последнее иPATHINFO_FILENAME
отрезает только последнее расширение. (смотрите пример ниже).
Замечание:
Если
path
не содержит расширения, то не будет возвращен элемент extension (см. ниже второй пример).
Если указан параметр options
, будет возвращена
строка (string), содержащая указанный элемент.
Список изменений
Версия | Описание |
---|---|
5.2.0 |
Добавлена константа PATHINFO_FILENAME .
|
Примеры
Пример #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"; // начиная с PHP 5.2.0
?>
Результат выполнения данного примера:
/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 Notice: Undefined index: extension in test.php on line 6 NULL
Примечания
Замечание:
Подробнее о получении информации о текущем пути, обратитесь к секции " Предопределенные зарезервированные переменные".
Замечание:
pathinfo() учитывает настройки локали, поэтому для корректной обработки пути с многобайтными символами должна быть установлена соответствующая локаль с помощью функции setlocale().
Смотрите также
- dirname() - Возвращает имя родительского каталога из указанного пути
- basename() - Возвращает последний компонент имени из указанного пути
- parse_url() - Разбирает URL и возвращает его компоненты
- realpath() - Возвращает канонизированный абсолютный путь к файлу
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с файловой системой
- Функции для работы с файловой системой
- basename
- chgrp
- chmod
- chown
- clearstatcache
- copy
- delete
- dirname
- disk_free_space
- disk_total_space
- diskfreespace
- fclose
- feof
- fflush
- fgetc
- fgetcsv
- fgets
- fgetss
- file_exists
- file_get_contents
- file_put_contents
- file
- fileatime
- filectime
- filegroup
- fileinode
- filemtime
- fileowner
- fileperms
- filesize
- filetype
- flock
- fnmatch
- fopen
- fpassthru
- fputcsv
- fputs
- fread
- fscanf
- fseek
- fstat
- ftell
- ftruncate
- fwrite
- glob
- is_dir
- is_executable
- is_file
- is_link
- is_readable
- is_uploaded_file
- is_writable
- is_writeable
- lchgrp
- lchown
- link
- linkinfo
- lstat
- mkdir
- move_uploaded_file
- parse_ini_file
- parse_ini_string
- pathinfo
- pclose
- popen
- readfile
- readlink
- realpath_cache_get
- realpath_cache_size
- realpath
- rename
- rewind
- rmdir
- set_file_buffer
- stat
- symlink
- tempnam
- tmpfile
- touch
- umask
- unlink
Коментарии
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
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;
}
?>
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 '/'
?>