PHP pathinfo
La función pathinfo de PHP devuelve información acerca de la ruta de un archivo o directorio en forma de un array asociativo o un string dependiendo de la opción elegida en $option
.
pathinfo(string $path, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME): mixed
Precauciónpathinfo()
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
– tiene como posible parámetro las siguientes constantes:
PATHINFO_DIRNAME
,PATHINFO_BASENAME
,PATHINFO_EXTENSION
PATHINFO_FILENAME
PATHINFO_ALL
Retornos
Si no se especifica $options
, se utilizará la constante PATHINFO_ALL
, esta hará que se devuelvan todos los elementos disponible (array asociativo).
En caso de utilizar otra constante (flag) se devolverá lo que se ha especificado como un string
Si path tiene más de una extensión,
PATHINFO_EXTENSION
devuelve solamente la últimaSi path tiene más de una extensión,
PATHINFO_FILENAME
solamente quita la últimaSi path no posee una extensión no se devolverá ningún valor.
Si basename comienza con . los siguientes caracteres serán extensión quedando filename vacío
Ejemplos de PHP pathinfo
Antes que nada debemos saber lo que nos devuelve el array asociativo, qué elementos tiene, cosa que no encontré en php.net, pero si podemos saberlo corrriendole un var_dump:
Knowing the associative array returned$path = '/home/user/Documents/archivo.txt'; $info = pathinfo($path); var_dump($info);
array(4) { ["dirname"]=> string(20) "/home/user/Documents" ["basename"]=> string(11) "archivo.txt" ["extension"]=> string(3) "txt" ["filename"]=> string(7) "archivo" }
Como puede ver info[‘basename’] da el mismo resultado que si corriéramos basename() y info[‘dirname’] es equivalente a correr dirname().
Recuerde que vimos que si nuestro path empezaba con . todo lo demas se trataria comu una extension veamos un ejemplo de eso ahora.
.<path>(probado en PHP 8.2.5)$path = '/home/user/Documents/.archivo.txt'; $info = pathinfo($path); var_dump($info);
array(4) { ["dirname"]=> string(20) "/home/user/Documents" ["basename"]=> string(12) ".archivo.txt" ["extension"]=> string(3) "txt" ["filename"]=> string(8) ".archivo" }
Esto me ha sorprendido gratamente, ya que no ha tratado en este caso, tal cual dice en las notas de php.net talvez sea por la versión. Aunque si es verdad que quito la última extensión
pathinfo en archivo sin extension$partes_ruta = pathinfo('/path/emptyextension.'); var_dump($partes_ruta);
array(4) { ["dirname"]=> string(5) "/path" ["basename"]=> string(15) "emptyextension." ["extension"]=> string(0) "" ["filename"]=> string(14) "emptyextension" }
Ahora daré un ejemplo para las constantes que nos darán un string como retorno, recordemos que estas son las siguientes:
- PATHINFO_DIRNAME,
- PATHINFO_BASENAME,
- PATHINFO_EXTENSION
- PATHINFO_FILENAME
$partes_ruta = pathinfo('/path/emptyextension/parr.txt',PATHINFO_DIRNAME); var_dump($partes_ruta);
string(20) "/path/emptyextension"