pathinfo

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

pathinfoDevuelve información acerca de la ruta de un fichero

Descripción

pathinfo(string $path, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME): mixed

pathinfo() devuelve información acerca de path: bien como un array asociativo, o bien como un string, en función del valor de options.

Nota:

Para infomación sobre la recuperación de la información de la ruta actual, lea la sección sobre variables reservadas predefinidas.

Precaución

pathinfo() tiene en cuenta la configuración regional, por lo que, para analizar una ruta que contiene caracteres multibyte correctamente, se debe establecer la configuración regional correspondiente usando la función setlocale().

Parámetros

path

La ruta a analizar.

options

Si está presente, indica qué elementos específicos se devuelven, de entre PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION y PATHINFO_FILENAME.

Si no se especifica options, se devuelven todos los elementos disponibles.

Valores devueltos

Si no se proporciona el parámetro options, se devuelve un array asociativo que contiene los siguientes elementos: dirname, basename, extension (si tiene), y filename.

Nota:

Si path tiene más de una extensión, PATHINFO_EXTENSION devuelve solamente la última, y PATHINFO_FILENAME solamente quita la última. (véase el primer ejemplo de más abajo).

Nota:

Si path no tiene ninguna extensión, no se devolverá ningún elemento extension (véase el segundo ejemplo de más abajo).

Nota:

Si basename de path comienza con un punto, los siguientes caracteres serán interpretados como extension, y filename estará vacío (véase el tercer ejemplo más adelante).

Si options estuviera presente, se devolverá un string que contiene el elemento solicitado.

Historial de cambios

Versión Descripción
5.2.0 Se añadió la constante PATHINFO_FILENAME.

Ejemplos

Ejemplo #1 Ejemplo de pathinfo()

<?php
$partes_ruta
= pathinfo('/www/htdocs/inc/lib.inc.php');

echo
$partes_ruta['dirname'], "\n";
echo
$partes_ruta['basename'], "\n";
echo
$partes_ruta['extension'], "\n";
echo
$partes_ruta['filename'], "\n"; // desde PHP 5.2.0
?>

El resultado del ejemplo sería:

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

Ejemplo #2 Ejemplo de pathinfo() mostrando las diferencias entre null y no utilizar extensión

<?php
$partes_ruta
= pathinfo('/path/emptyextension.');
var_dump($partes_ruta['extension']);

$partes_ruta = pathinfo('/path/noextension');
var_dump($partes_ruta['extension']);
?>

El resultado del ejemplo sería algo similar a:

string(0) ""

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

Ejemplo #3 Ejemplo de pathinfo() para un fichero que comienza con punto

<?php
print_r
(pathinfo('/una/ruta/.test'));
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [dirname] => /una/ruta
    [basename] => .test
    [extension] => test
    [filename] => 
)

Ver también

  • dirname() - Devuelve la ruta de un directorio padre
  • basename() - Devuelve el último componente de nombre de una ruta
  • parse_url() - Analiza un URL y devuelve sus componentes
  • realpath() - Devuelve el nombre de la ruta absoluta canonizado

add a note add a note

User Contributed Notes 4 notes

up
40
Lori
6 years ago
Simple example of pathinfo and array destructuring in PHP 7:
<?php
[ 'basename' => $basename, 'dirname' => $dirname ] = pathinfo('/www/htdocs/inc/lib.inc.php');

var_dump($basename, $dirname);

// result:
// string(11) "lib.inc.php"
// string(15) "/www/htdocs/inc"
?>
up
4
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
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
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